MongoDB对象满足对象数组中的两个条件

时间:2013-12-17 11:51:20

标签: arrays mongodb

我有一个包含对象数组的对象:

{
    _id: 12345,
    data: [
        {
            state: 1,
            type: 3,
            info: "abc"
        },{
            state: 2,
            type: 3,
            info: "cde"
        },{
            state: 2,
            type: 3,
            info: "efg"
        }
    ]
}

我需要从 {data.state:2,data.type:3} 的集合中选择对象,但是如果运行此查询,我将获得包含州:2 和类型:3 ,但对象包含州:2 类型:3 < /强>

如何在对象数组中的一个对象中匹配两个条件?如何选择仅包含状态:2 类型:3 的对象的对象?

P.S。我知道$ elemMatch,但这只会从上面的示例对象返回{state:2,type:3,info:“cde”},而我需要所有的数据

P.P.S。以下是一些示例结果:

已检查的对象:

 data: [
    {
        state: 1,
        type: 3
    },{
        state: 2,
        type: 3
    },{
        state: 2,
        type: 3
    }
]

输出:是(有2个对象同时包含状态2和类型3)

data: [
    {
        state: 1,
        type: 3
    },{
        state: 2,
        type: 4
    },{
        state: 2,
        type: 0
    }
]

输出:否(没有一个对象包含状态2和类型3)

data: [
    {
        state: 5,
        type: 3
    },{
        state: 1,
        type: 3
    },{
        state: 1,
        type: 4
    },{
        state: 2,
        type: 3
    }
]

输出:是(有一个对象包含状态2和类型3)

1 个答案:

答案 0 :(得分:0)

$ elemMatch 返回数组中的第一个匹配元素。您可以使用聚合框架来获得所需的内容。

db.collection.aggregate(
  {$unwind : "$data"},
  {$match : {"data.state" : 2, "data.type" : 3}}
)