Mongodb查询如何在同一个数组里面匹配到两个字段才返回?
发布于 8 年前 作者 wuyizhou 3746 次浏览 来自 问答

我的整个查询是包含在$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。

回到顶部