MongoDB聚合:如何检查数组中是否存在包含多个属性的对象
我有一个对象数组,我想检查是否有一个对象匹配多个属性。我曾尝试在和$和中使用MongoDB聚合:如何检查数组中是否存在包含多个属性的对象,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个对象数组,我想检查是否有一个对象匹配多个属性。我曾尝试在和$和中使用$,但它没有按我希望的方式工作 我有一个类似的数组 "choices": [ { "name": "choiceA", "id": 0, "l": "k" }, { "name": "
$,但它没有按我希望的方式工作
我有一个类似的数组
"choices": [
{
"name": "choiceA",
"id": 0,
"l": "k"
},
{
"name": "choiceB",
"id": 1,
"l": "j"
},
{
"name": "choiceC",
"id": 2,
"l": "l"
}
]
我正在尝试编写聚合代码,以检查是否存在同时包含“id”:2
和“l”:“j”
属性的对象。我当前的实现检查是否有包含第一个属性的对象,然后检查是否有包含第二个属性的对象
我怎样才能得到我想要的结果
下面,请参阅我的聚合查询。完整的代码是
上面的查询返回true,但是数组中没有对象,这两个属性都是id:2
和“l”:“J”
。我知道代码按预期工作。我怎样才能得到我想要的结果呢?你想使用类似
编辑
在聚合$project
阶段中,我将使用
我更新了标题,使其更加清晰。我想检查数组中是否存在包含两个特定属性的对象。我知道如何使用一个属性。我在
中使用$。但是我怎么能用两个属性来做呢?我不确定我是否理解,选项:[{id:2,l:k},{id:3,l:j}]
一个匹配的文档?不。在这个问题中,我有一个指向聚合查询的链接,显示了我试图实现的目标。我编辑了我的答案,以匹配您使用的管道,由于不能在聚合项目阶段使用$elemMatch
,因此我将使用$filter
。
db.poll.aggregate([
{
"$match": {
"_id": 100
}
},
{
$project: {
numberOfVotes: {
$and: [
{
$in: [
2,
"$choices.id"
]
},
{
$in: [
"j",
"$choices.l"
]
}
]
},
}
}
])
db.collection.find({
choices: {
$elemMatch: {
id: 2,
l: "j"
}
}
})
db.poll.aggregate([
{
"$match": {
"_id": 100
}
},
{
$project: {
numberOfVotes: {
$gt: [
{
$size: {
$filter: {
input: "$choices",
as: "choice",
cond: {
$and: [
{
$eq: [
"$$choice.id",
2
]
},
{
$eq: [
"$$choice.l",
"j"
]
}
]
}
}
}
},
0
]
}
}
}
])