у вас есть коллекция MongoDB под названием комментарии, содержащий документы, как это:Запрашивание коллекцию MongoDB с документами, содержащими массив (суб) документы, в которых все документы в массиве соответствовать условию
{
"_id" : ObjectId("55fc4e8f2b21ff102bb20d94"),
"userName" : "user0053",
"comment" : [
{
"timestamp" : ISODate("2015-09-18T17:49:03.678Z"),
"title" : "Some title XYZ",
"status" : "Approved",
"content" : "blah blah blah"
},
{
"timestamp" : ISODate("2015-09-18T17:49:03.678Z"),
"title" : "Some nice looking title",
"status" : "Approved",
"content" : "blah blah blah"
},
{
"timestamp" : ISODate("2015-09-18T17:49:03.678Z"),
"title" : "A title",
"status" : "Spam",
"content" : "blah blah blah"
}
]
}
comment
элемент представляет собой массив документов, каждый из которых содержит несколько элементов, среди которых есть статус с 3 (или любыми) возможными значениями, например Подтвержден, Спам, Ожидающий просмотр.
Я хочу запросить все документы в коллекции, элемент комментария которых содержит массив, в котором ВСЕ документы имеют статус «Approved».
В приведенном выше примере документ не квалифицируется, поскольку имеется хотя бы один элемент комментария, который имеет статус, отличный от утвержденного.
Я считаю, что это невозможно сделать с опциями $ all и $ elemMatch, но это нужно сделать с помощью агрегатного конвейера. Я просто не мог понять, как это сделать.
В этом простейшей форме, это может быть достигнуто с помощью '$ nin' Я думаю:' db.collection.find ({ "comment.status": {$ нин: [ "Спам", «PendingReview "]}})' –
Ничего себе ... это просто! Большое вам спасибо, это действительно работает. Если вы заинтересованы, пожалуйста, создайте ответ, и я его приму. – agarcian