Mongodb查询如何在同一个数组里面匹配到两个字段才返回?
我的整个查询是包含在$add的数组内的,包括下面我的所有语句。 {name:123} === $add : [{name:123}]
我想通过查询文档Persons.king中的数组结构数据的major值,比如: {Persons.king.major:‘Cpu’}
但是这样返回的是所有含有Persons.king.major为Cpu的文档(不管有多少个Persons.king.major为Cpu的字段),但是我想查询的是每个文档中含有两个或者大于两个Persons.king.major字段并值为Cpu的文档才返回,请问大家有更好的思路吗?感谢!! 数据结构:
{
name : 123,
key : 'qwe',
Persons : {
king : [
{
name : 'wang',
major : 'computer'
},
{
name : 'wang',
major : 'Cpu'
},
{
name : 'wang',
major : 'Cpu'
},
]
}
}
1 回复
用聚合:
db.collection.aggrgate(
{"$unwind": "$Persons.king"},
{"$match": {"Persons.king.major": "Cpu"}},
{"$group": {"_id": "$_id", "count": {"$sum": 1}}},
{"$match": {"count": {"$gte": 2}}}
);
king下面的元素显然是内嵌文档,通常的建议是,如果你会遇到频繁的对内嵌文档的操作,那么最好把它拆成独立的collection。