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}}
)