2015-08-28 58 views
0

虽然MongoDB的点缀查询作品,elemMatch查询不

collection.find({ "data.username": "someusername" }}})

作品,取1个匹配的文档,这

collection.find({ data: { $elemMatch: { username: "someusername" }}})

不取任何东西。不应该吗? (我会使用虚线但想要扩展查询。)

这是与Meteor集合中的mongo控制台。在Robomongo和流星控制台也尝试过,结果也一样。

修订:这里有一个文件(修剪)

{ 
    "_id" : "fDyZsiuqQgkRmPno5", 
    "type" : "user", 
    "data" : { 
     "id" : 1234, 
     "username" : "someusername", 
     "website" : "http://www.somewhere.com", 
     "email" : null, 
     "payments" : [ 
      { 
       "payment" : { 
        "id" : "zFyZsiGgQskRmPn43" 
       } 
      } 
     ] 
    }, 
    "createdAt" : ISODate("2015-08-28T12:16:46.918+02:00") 
} 
+0

正如我在我的回答(甚至在你的“编辑”之前)所说的,你不能在这里使用'$ elemMatch',因为'data'不是数组字段 – styvane

+0

我知道。标记为正确。我只是在写信给你。 :) – jiku

回答

1

你的第二个查询没有返回任何结果,因为data不是阵列领域的一个例子。这是预期的行为看到documentation

$elemMatch操作者匹配包含与所有指定的查询条件匹配的至少一个元素的数组字段的文档。

+0

谢谢,接受,因为它回答。将工作包中的数据包装起来。文档不会有多个数据子文档,因此知道是否有有效的方法来查询具有多个条件(如$ elemMatch)的文档是非常好的。 – jiku