Mongodb 在数组中搜索多个字段
我有一个MongoDB文档,其结构如下:Mongodb 在数组中搜索多个字段,mongodb,Mongodb,我有一个MongoDB文档,其结构如下: { "user_id": 7387, "first_name": "Daniel", "roles": [ { "role_id": "509c20144fd846549e8d42ef", "role_name": "Writer", "is_lead": 0 }, { "role_id": "509c20344fd846549e8d42f0", "role_
{
"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
}
]
}
如何查找所有具有roles.role\u name作为编写者和roles.is\u lead作为1的用户(所有同时也是lead的编写者)
我试过:
db.users.find({$and:[{"roles.role_name":"Writer","roles.is_lead":1}]});
在上面的例子中,它应该只返回“Tom”。但是这会返回“Tom”和“Daniel”(我猜它会为“Daniel”的编辑角色选择{roles.is_lead:1})。我如何修复这个查询
谢谢。您需要的是确保搜索匹配特定元素,而不是同一文档中任何元素的混合
db.test.find({roles: {$elemMatch: {role_name:"Writer", is_lead:1}}})
您的原始查询也与只执行默认基本搜索相同,因为这将是AND。问题是AND应用于文档的任何部分。尝试简单地使用db.users.find({“roles.role\u name”:“Writer”,“roles.is\u lead”:1})你试过我最近的更新吗?我的第一个答案是错的。但是elemMatch适合我
db.test.find({roles: {$elemMatch: {role_name:"Writer", is_lead:1}}})