Mongodb 在Mongo中搜索多个子文档

Mongodb 在Mongo中搜索多个子文档,mongodb,mongodb-query,Mongodb,Mongodb Query,鉴于以下收集: { name: User1 tags: [ {k:"group", v:"test"}, {k:"color", v:"blue"} ] }, { name: User2 tags: [ {k:"group", v:"dev"}, {k:"color", v:"blue"} ] }, { name: User3 tags: [ {k:"g

鉴于以下收集:

{
    name: User1
    tags: [
        {k:"group", v:"test"},
        {k:"color", v:"blue"}
    ]
},
{
    name: User2
    tags: [
        {k:"group", v:"dev"},
        {k:"color", v:"blue"}
    ]
},
{
    name: User3
    tags: [
        {k:"group", v:"dev"},
        {k:"color", v:"red"}
    ]
}
如何搜索
“tags”
字段以查找给定用户

例如,对于
User2
,我可以使用match一次搜索一个标记:

db.users.find({tags: {$elemMatch: {k:"group", v:"dev"}}})
结果是:
User2和User3
。或

db.users.find({tags: {$elemMatch: {k:"color", v:"blue"}}}) 
结果是:
User1和User2

但是当我试着去做的时候

db.users.find({tags: {$elemMatch: {$and: [{k:"group", v:"dev"}, {k:"color", v:"blue"}]})
我没有火柴


如何搜索
User2
记录?

您可以使用
Aggregate()
,解决您的问题

请尝试以下查询:-

db.users.aggregate([
   {$project: {'name': 1}}, 
   {$unwind: '$tags'},
   {$match: {'k':     'group', 'v': 'dev'}}
 ])

您可以使用
Aggregate()
,解决您的问题

请尝试以下查询:-

db.users.aggregate([
   {$project: {'name': 1}}, 
   {$unwind: '$tags'},
   {$match: {'k':     'group', 'v': 'dev'}}
 ])

通过将$all操作符与$elemMatch一起使用,我能够得到我想要的结果

db.task.find({tags: {$all: [
    {$elemMatch: {k:"group", v:"dev"}}, 
    {$elemMatch: {k:"color", v:"blue"}}
  ]}})

有关更多信息,请参阅。

通过使用$all运算符和$elemMatch,我能够获得想要的结果

db.task.find({tags: {$all: [
    {$elemMatch: {k:"group", v:"dev"}}, 
    {$elemMatch: {k:"color", v:"blue"}}
  ]}})
有关更多信息,请参阅。

尝试此查询:

db.temp4.find({$and:[{"tags":{"k":"group","v":"dev"}},{"tags":{"k":"color","v":"blue"}}]})
它返回所需的结果

尝试以下查询:

db.temp4.find({$and:[{"tags":{"k":"group","v":"dev"}},{"tags":{"k":"color","v":"blue"}}]})

它返回所需的结果

查看“展开”:尝试$or而不是and@AbdulRehmanSayed使用$or会导致我获得
k和v
的所有三个记录值字符串是否正确?@Shrabanee correct查看“展开”:尝试$or而不是and@AbdulRehmanSayed使用$or会导致我获得
k的所有三个记录值和v
字符串是否正确?@Shrabanee更正此查询不返回任何结果此查询不返回任何结果