2013-03-05 4 views
1

У меня есть следующие данные:Как запросить нулевой подкаталог документов в MongoDB?

/* 1 */ 
{ 
    "_id" : 1, 
    "FirstName" : "John", 
    "LastName" : "Doe", 
    "Test" : [{ 
     "TestId" : ObjectId("5046109daedabb0cf8800f3f"), 
     "DateTaken" : ISODate("2012-09-10T15:46:32.866Z") 
    }, { 
     "TestId" : ObjectId("506e0928aedabb087c4ec9d1"), 
     "DateTaken" : ISODate("2011-06-26T18:05:52.625Z"), 
     "Responses" : [{ 
      "AnswerId" : "506e0928aedabb087c4ec98c", 
      "QuestionId" : ObjectId("506e0928aedabb087c4ec98b"), 
      "ResponseDate" : ISODate("2011-06-26T04:00:00Z") 
     }] 
    }] 
} 

/* 2 */ 
{ 
    "_id" : 2, 
    "FirstName" : "Jane", 
    "LastName" : "Doe", 
    "TestHistory" : [{ 
     "TestId" : ObjectId("506e0928aedabb087c4ec9d1"), 
     "DateTaken" : ISODate("2011-06-26T18:05:52.625Z"), 
     "Responses" : [{ 
      "AnswerId" : "506e0928aedabb087c4ec98c", 
      "QuestionId" : ObjectId("506e0928aedabb087c4ec98b"), 
      "ResponseDate" : ISODate("2011-06-26T04:00:00Z") 
     }] 
    }] 
} 

Я пытаюсь написать запрос, который возвращает все экземпляры, где существуют тест, который не имеет ответов. Я попытался следующие запросы:

  1. { "Test.Responses": {$ существует ложь}}
  2. {$ и: [{Тест: {$ выходит: истинные}}, { " Test.Responses ": {$ существует ложь}}]}

Оба которые возвращают 0 результатов. Что мне не хватает?

+1

Возможный обман http://stackoverflow.com/questions/6607102/mongodb-match-non-empty-doc-in-array. См. Комментарий по адресу http://stackoverflow.com/questions/6607102/mongodb-match-non-empty-doc-in-array#comment18700846_6838057 –

+0

Примечание. В отличие от тестирования для непустого значения поля '$ size' не использует индекс – Sammaye

ответ

1

Я думаю, что то, что вы ищете это:

db.foo.find({ 
    Test: { $elemMatch: { 
     Responses: { $exists: false } 
    } 
}) 

В противном случае, ваш запрос будет искать записи, где все документы по Test не имеют Responses свойства.

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