我正在尝试查询mongodb文档而没有运气。 以下查询用于获取ID为domainOwner并且范围为clearcrimson的用户。
db.getCollection("users").findOne( { "roles": { $elemMatch: {_id: "domainOwner", scope: "clearcrimson" } } }, {_id:1})
如何修改查询以使其用户的一个电子邮件ID为a @ b.com,ID为domainOwner,范围为clearcrimson?
文档:
{
"_id" : "7Rc5q2o3Qnv7j2HuT",
"emails" : [
{"address" : "a@b.com"},
{"address" : "c@d.com"},
],
"roles" : [
{"_id" : "domainOwner", "scope" : "clearcrimson"},
{"_id" : "domainOwner", "scope" : "clearcrimson2"}
]
}
答案 0 :(得分:1)
db.getCollection("users").findOne({ "roles": {$elemMatch: { "_id": "domainOwner", "scope": "clearcrimson"}}, "emails.address": "a@b.com" })
当您使用$elemMatch
匹配数组的单个对象中的多个条件时,可以像我一样使用简单的 arrayName.fieldName
来匹配单个条件与上面的查询中的“ emails.address” 。
您可以使用 $
(位置运算符从阵列中仅投影匹配的对象)
db.getCollection("users").findOne({ "roles": {$elemMatch: { "_id": "domainOwner", "scope": "clearcrimson"}}, "emails.address": "a@b.com" }, {_id: 1, "roles.$": 1, emails: 1})
我们不能在一个投影阶段使用两个位置运算符。 我正在使用mongo 3.4版。