MongoDB 点分查询有效,elemMatch 查询无效
MongoDB dotted query works, elemMatch query doesn't
同时
collection.find({ "data.username": "someusername" }}})
有效,获取 1 个匹配的文档,这个
collection.find({ data: { $elemMatch: { username: "someusername" }}})
没有获取任何东西。不应该吗? (我会使用虚线但想扩展查询。)
这是在 Meteor 集合上使用 mongo 控制台。在 Robomongo 和 Meteor 控制台也试过,结果相同。
UPDATED:这是一个文档示例(已修剪)
{
"_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")
}
您的第二个查询没有 return 任何结果,因为 data
不是 数组 字段。这是预期的行为,请参阅 documentation
The $elemMatch
operator matches documents that contain an array field with at least one element that matches all the specified query criteria.
同时
collection.find({ "data.username": "someusername" }}})
有效,获取 1 个匹配的文档,这个
collection.find({ data: { $elemMatch: { username: "someusername" }}})
没有获取任何东西。不应该吗? (我会使用虚线但想扩展查询。)
这是在 Meteor 集合上使用 mongo 控制台。在 Robomongo 和 Meteor 控制台也试过,结果相同。
UPDATED:这是一个文档示例(已修剪)
{
"_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")
}
您的第二个查询没有 return 任何结果,因为 data
不是 数组 字段。这是预期的行为,请参阅 documentation
The
$elemMatch
operator matches documents that contain an array field with at least one element that matches all the specified query criteria.