MongoDB - 如何找到文档字段包含具有给定名称的子文档? (包含示例查询和文档)

问题描述:

这里我试图检索文档中包含文档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

$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