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

Arrays 在对象数组中满足两个条件的MongoDB对象,arrays,mongodb,Arrays,Mongodb,我有一个包含对象的集合,其中包含对象数组: { _id: 12345, data: [ { state: 1, type: 3, info: "abc" },{ state: 2, type: 3, info: "cde" },{ state: 2,

我有一个包含对象的集合,其中包含对象数组:

{
    _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的对象

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

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

要检查的对象:

 data: [
    {
        state: 1,
        type: 3
    },{
        state: 2,
        type: 3
    },{
        state: 2,
        type: 3
    }
]
是否输出:是(有两个对象同时包含状态2和类型3)

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


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

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

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

你能举例说明查询应该返回什么吗?@benjaminjosephw我已经更新了这个问题。您可以看到Mongo正在查看的对象,以及它是否应该包含在结果中的时间。
data: [
    {
        state: 5,
        type: 3
    },{
        state: 1,
        type: 3
    },{
        state: 1,
        type: 4
    },{
        state: 2,
        type: 3
    }
]
db.collection.aggregate(
  {$unwind : "$data"},
  {$match : {"data.state" : 2, "data.type" : 3}}
)