Arrays 嵌入式mongodb文档的查询数组
我正在尝试查询mongodb文档,但运气不好。 以下查询用于获取id为domainOwner且作用域为clearcrimson的用户Arrays 嵌入式mongodb文档的查询数组,arrays,mongodb,mongodb-query,Arrays,Mongodb,Mongodb Query,我正在尝试查询mongodb文档,但运气不好。 以下查询用于获取id为domainOwner且作用域为clearcrimson的用户 db.getCollection("users").findOne( { "roles": { $elemMatch: {_id: "domainOwner", scope: "clearcrimson" } } }, {_id:1}) 如何修改查询以获得一个电子邮件id可能为的用户a@b.com,id是域名所有者,范围是clearcrimson 文档: {
db.getCollection("users").findOne( { "roles": { $elemMatch: {_id: "domainOwner", scope: "clearcrimson" } } }, {_id:1})
如何修改查询以获得一个电子邮件id可能为的用户a@b.com,id是域名所有者,范围是clearcrimson
文档:
{
"_id" : "7Rc5q2o3Qnv7j2HuT",
"emails" : [
{"address" : "a@b.com"},
{"address" : "c@d.com"},
],
"roles" : [
{"_id" : "domainOwner", "scope" : "clearcrimson"},
{"_id" : "domainOwner", "scope" : "clearcrimson2"}
]
}
当您使用$elemMatch
来匹配数组中单个对象中的多个条件时,您可以使用简单的arrayName.fieldName
来匹配单个条件,就像我在上面的查询中对“emails.address”所做的那样
您可以使用$
(位置运算符仅从阵列中投影匹配的对象)
我们不能在一个投影阶段使用两个位置运算符。
我使用的是mongo 3.4版。我看不出有什么新问题。总的来说,您只需要在数组中匹配双条件的文档。唯一的区别是文档字段仅此而已。
db.getCollection("users").findOne({ "roles": {$elemMatch: { "_id": "domainOwner", "scope": "clearcrimson"}}, "emails.address": "a@b.com" })
db.getCollection("users").findOne({ "roles": {$elemMatch: { "_id": "domainOwner", "scope": "clearcrimson"}}, "emails.address": "a@b.com" }, {_id: 1, "roles.$": 1, emails: 1})