2014-09-25 61 views
1

這裏我試圖檢索文檔中包含文檔DummyFoo的文檔,DummyFoo又包含文檔DummyBar?MongoDB - 如何找到文檔字段包含具有給定名稱的子文檔? (包含示例查詢和文檔)

據我可以告訴我下面的語法是正確的,但沒有結果返回,但我知道它們存在。我是否錯誤地構建了我的查詢?

{ "DummyFoo" : { "$elemMatch" : { "DummyBar": { "$exists" : true } }}} 

下面是我希望以匹配文檔的例子:

{ 
    "_id" : ObjectId("5423d66ba077e6205cc9ecef"), 
    "Title" : "Test 1234587611", 
    "Subtitle" : "Test 1 Subtitle", 
    "DummyFoo" : { 
    "DummyDate" : "2014-09-25T09:46:35.6626303+01:00", 
    "DummyBar" : { 
     "Name" : "Test", 
     "Number" : 1 
    } 
    } 
} 
+1

這是正確的還是不是?你的文件是什麼樣的? AFAIK其他人可以告訴你的唯一方法是通過顯示你期望匹配的文檔。 ESP候選人? – 2014-09-25 10:08:04

+0

這是一個公平的評論。我以爲我可能會嚴格地構建查詢。我現在添加了一個示例文檔。那麼,你希望這個查詢匹配這個文件嗎?謝謝。 – gb2d 2014-09-25 10:20:59

回答

3

$elemMatch是專爲查詢arrays.In這種情況下做,你有一個嵌套的JSON,其中的MongoDB識別爲embedded document

您可以使用dot notation查詢嵌入式文檔。

{ "DummyFoo.DummyBar": { "$exists" : true }} 
+0

正確。但修飾「爲什麼」會提供更好的答案。具體來說,如何解釋爲什麼$ elemMatch失敗? – 2014-09-25 10:42:28

+0

爲什麼肯定會有興趣。 – gb2d 2014-09-25 10:49:15

+0

我認爲[elemMatch](http://docs.mongodb.org/manual/reference/operator/query/elemMatch/)適用於數組。如果使用''DummyFoo':[{...}]'更改結構,那麼grx的查詢將起作用 – Barno 2014-09-25 10:50:09

相關問題