Моя основная схема представляет собой событие с некоторыми шагами, встроенными в массив. Я хочу запросить события и отфильтровать шаги с некоторыми условиями. Таким образом, событие возвращается не со всеми шагами, которые у него есть, а только с теми, которые соответствуют условию. Я могу сделать это с помощью агрегации, но мне нужны документы, возвращаемые как документы мангуста, поэтому я могу использовать функцию save() для каждого из них, так что, я полагаю, это нужно сделать, используя только мангуста.
пример события:
{
"_id" : ObjectId("5d57b6ad754e9d1ec0c123e6"),
"title" : "wedding",
"user" : ObjectId("5d4fedfd63dc55207cf128ff"),
"date" : ISODate("2019-09-24T20:00:00.000Z"),
"steps" : [
{
"_id" : ObjectId("5d57b6ad754e9d1ec0c123e7"),
"title" : "home",
"startDate" : ISODate("2019-06-27T20:00:00.000Z"),
"endDate" : ISODate("2019-07-21T20:00:00.000Z"),
"isDone" : false,
"state" : 2
},
{
"_id" : ObjectId("5d57b6ad754e9d1ec0c123e8"),
"title" : "guests",
"startDate" : ISODate("2019-07-07T20:00:00.000Z"),
"endDate" : ISODate("2019-07-30T20:00:00.000Z"),
"isDone" : false,
"state" : 2
},
{
"_id" : ObjectId("5d57b6ad754e9d1ec0c123e9"),
"title" : "car",
"startDate" : ISODate("2019-07-11T20:00:00.000Z"),
"endDate" : ISODate("2019-07-20T20:00:00.000Z"),
"isDone" : false,
"state" : 2
}
]
};
агрегация, которую я имею до сих пор:
const now = new Date();
Event.aggregate([
{
$match: { date: { $gte: now } },
},
{
$unwind: '$steps',
},
{
$match: { 'steps.startDate': { $lte: now }, 'steps.endDate': { $gte: now }, 'steps.state': { $ne: 1 } },
},
])
Я искал документы, но ничего не нашел.
Array.filter
). так ли это? - person yaya   schedule 01.09.2019{ date: { $gte: now } },
, вы также можете применить условия для вложенных документов, например:Event.find({ $and: [ date: { $gte: now }, 'steps.startDate': { $lte: now }, 'steps.endDate': { $gte: now }, 'steps.state': { $ne: 1 } ]}
(у меня может быть синтаксическая ошибка или что-то подобное, но вы можете сделать что-то подобное.) - person yaya   schedule 01.09.2019