【问题标题】:MongoDB dotted query works, elemMatch query doesn'tMongoDB dotted 查询有效,elemMatch 查询无效
【发布时间】:2015-08-28 12:47:26
【问题描述】:

虽然

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

工作,获取 1 个匹配的文档,这个

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

不获取任何内容。不应该吗? (我会使用 dotted 但想扩展查询。)

这是 Meteor 集合上的 mongo 控制台。在 Robomongo 和 Meteor 控制台上也试过,结果相同。

已更新:这是一个文档示例(已修剪)

{
    "_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")
}

【问题讨论】:

  • 正如我在回答中所说(甚至在您的“编辑”之前),您不能在这里使用$elemMatch,因为data 不是数组字段
  • 我知道。标记为正确。我只是在给你写信。 :)

标签: arrays mongodb mongodb-query nested-queries database


【解决方案1】:

您的第二个查询没有返回任何结果,因为 data 不是 array 字段。这是预期的行为,请参阅documentation

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

【讨论】:

  • 谢谢,接受了,因为它回答了它。将数据包装在括号中有效。一个文档不会有多个数据子文档,因此很高兴知道是否有一种有效的方法来查询具有多个条件(如 $elemMatch)的那些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多