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更正此查询不返回任何结果此查询不返回任何结果