我有一个包含对象数组的对象:
{
_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)
答案 0 :(得分:0)
$ elemMatch 返回数组中的第一个匹配元素。您可以使用聚合框架来获得所需的内容。
db.collection.aggregate(
{$unwind : "$data"},
{$match : {"data.state" : 2, "data.type" : 3}}
)