2013-03-05 78 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 – 2013-03-05 19:06:42

+0

中的註釋,與測試字段的非空值不同,「$ size」不使用索引 – Sammaye 2013-03-05 19:23:20

回答

1

我認爲你正在尋找的是這樣的:

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

否則,你的查詢會找地方Test下的所有文件,不具有Responses財產的記錄。