鉴于以下收集:
{
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
,我可以一次搜索一个匹配的标记:
db.users.find({tags: {$elemMatch: {k:"group", v:"dev"}}})
结果为:User2 and User3
。或
db.users.find({tags: {$elemMatch: {k:"color", v:"blue"}}})
结果为:User1 and User2
但是当我尝试做的时候
db.users.find({tags: {$elemMatch: {$and: [{k:"group", v:"dev"}, {k:"color", v:"blue"}]})
我没有比赛。
如何搜索User2
记录?
答案 0 :(得分:1)
通过$ elemMatch
使用$ all运算符,我得到了我想要的结果db.task.find({tags: {$all: [
{$elemMatch: {k:"group", v:"dev"}},
{$elemMatch: {k:"color", v:"blue"}}
]}})
有关详细信息,请参阅doc。
答案 1 :(得分:0)
您可以使用Aggregate()
来解决您的问题。
尝试此查询: -
db.users.aggregate([
{$project: {'name': 1}},
{$unwind: '$tags'},
{$match: {'k': 'group', 'v': 'dev'}}
])
https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/emphasized text
答案 2 :(得分:-1)
尝试此查询:
db.temp4.find({$and:[{"tags":{"k":"group","v":"dev"}},{"tags":{"k":"color","v":"blue"}}]})
返回所需的结果