#mongodb #mongoose
Вопрос:
Мне нужно вернуть «заблокированные дни» из API, что означает даты, которые повторяются не менее 3 раз в значениях «Дата отправки» в документах для сбора заказов.
Пример:
{
shippingDate: 'sunday'
},
{
shippingDate: 'monday'
},
{
shippingDate: 'sunday'
},
{
shippingDate: 'tuesday'
},
{
shippingDate: 'sunday'
},
{
shippingDate: 'wednesday'
}
Будет возвращать ['sunday']
Ответ №1:
Вы можете использовать агрегацию, подобную этой:
$group
по дням, добавляя один, используя$sum
, чтобы получить за каждый день, сколько раз появляется.$match
где день появляется не менее трех раз$project
вернуть только название дня.
db.collection.aggregate([
{
"$group": {
"_id": "$shippingDate",
"days": {
"$sum": 1
}
}
},
{
"$match": {
"days": {
"$gte": 3
}
}
},
{
"$project": {
"days": 0
}
}
])
Который возвращает
[
{
"_id": "sunday"
}
]
MongoDB использует формат JSON, поэтому вы извлекаете формат JSON. Используя мангуста, вы можете попробовать это:
const queryResult = [
{
"_id": "sunday"
}
]
const desiredValue = queryResult.map(m => m._id)
console.log(desiredValue)
Пример здесь