我有一个像这样结构的MongoDB文档:
{
"user_id": 7387,
"first_name": "Daniel",
"roles": [
{
"role_id": "509c20144fd846549e8d42ef",
"role_name": "Writer",
"is_lead": 0
},
{
"role_id": "509c20344fd846549e8d42f0",
"role_name": "Editor",
"is_lead": 1
}
]
},
{
"user_id": 15735,
"first_name": "Tom",
"roles": [
{
"role_id": "509c203f4fd846549e8d42f1",
"role_name": "Admin",
"is_lead": 0
},
{
"role_id": "509c20144fd846549e8d42ef",
"role_name": "Writer",
"is_lead": 1
},
{
"role_id": "509c20344fd846549e8d42f0",
"role_name": "Editor",
"is_lead": 0
}
]
}
如何找到所有将role.role_name作为Writer并将roles.is_lead作为1的所有用户(所有同时也是潜在客户的作者)?
我试过了:
db.users.find({$and:[{"roles.role_name":"Writer","roles.is_lead":1}]});
在上面的示例中,它应该只返回“Tom”。但这会返回“Tom”和“Daniel”(我猜它会选择{roles.is_lead:1}作为“Daniel”的编辑角色。我该如何修复此查询?
感谢。
答案 0 :(得分:0)
您要找的是$elemMatch
,以确保您的搜索与特定元素匹配,而不是同一文档中任何元素的混合。
db.test.find({roles: {$elemMatch: {role_name:"Writer", is_lead:1}}})
您的原始查询也与进行默认基本搜索相同,因为它也是一个AND。问题是AND正在应用于文档的任何部分。
答案 1 :(得分:0)
只需尝试db.users.find({“roles.role_name”:“Writer”,“roles.is_lead”:1});