2015-09-18 2 views
0

у вас есть коллекция 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, но это нужно сделать с помощью агрегатного конвейера. Я просто не мог понять, как это сделать.

+0

В этом простейшей форме, это может быть достигнуто с помощью '$ nin' Я думаю:' db.collection.find ({ "comment.status": {$ нин: [ "Спам", «PendingReview "]}})' –

+0

Ничего себе ... это просто! Большое вам спасибо, это действительно работает. Если вы заинтересованы, пожалуйста, создайте ответ, и я его приму. – agarcian

ответ

1

В простейшей форме это может быть достигнуто с помощью $nin.

db.collection.find({"comment.status" : {$nin : ["Spam" , "PendingReview"]}})

Смежные вопросы