【发布时间】:2021-06-07 00:11:26
【问题描述】:
我有一个 MongoDb 集合,如下所示: 每个文档在“currentVersion”中都有一个“bricks”数组。 现在对于少数 Bricks 数组,有一些多余的砖 id。 我需要检索所有具有冗余积木 ID 的文档。
{
name: "page1",
"currentVersion" : {
"bricks" : [
{
"id" : 1.0
},
{
"id" : 2.0
}
]
}
}
{
name: "page2",
"currentVersion" : {
"bricks" : [
{
"id" : 13.0
},
{
"id" : 13.0
}
]
}
}
{
name: "page3",
"currentVersion" : {
"bricks" : [
{
"id" : 20.0
},
{
"id" : 30.0
}
]
}
}
{
"name" : "page4",
"currentVersion" : {
"bricks" : [
{
"id" : 50.0
},
{
"id" : 50.0
},
{
"id" : 70.0
}
]
}
}
我的方法如下:
- 我正在创建两个数组 - 'origValuesSize' 和 'allValuesSize'
- 如果这两个值不相等,那么就是有冗余值的文档
您能否建议我如何根据上述条件过滤文档。 在下面的代码中需要帮助
db.pages.find({},db.aggregate(
[
{ $project: {
origValuesSize: { $size: {$concatArrays : [ "$currentVersion.bricks.id" ]} },
allValuesSize: {$size: {$setUnion : [ "$currentVersion.bricks.id" ]}},
$filter: --> Need Help Here to compare the above two sizes and filter accordingly
}}
]
))
- 编辑:1
我的预期结果如下: 我只需要在“砖块”数组中显示那些具有冗余砖块 ID 的文档。
{
name: "page2",
"currentVersion" : {
"bricks" : [
{
"id" : 13.0
},
{
"id" : 13.0
}
]
}
}
{
"name" : "page4",
"currentVersion" : {
"bricks" : [
{
"id" : 50.0
},
{
"id" : 50.0
},
{
"id" : 70.0
}
]
}
}
提前致谢,
【问题讨论】:
-
你能展示你的预期结果吗?这两点都不清楚,请您解释一下。
-
我已经添加了预期的结果。实际上我正在尝试使用聚合的一种方法。
db.pages.find({},db.aggregate( .. ),我在其中获取两个砖块 ID 数组 - 一个使用 $setUnion,另一个使用 $concatArrays,我的逻辑是比较这两个数组的大小。如果这两个 Arrays 长度不相等,则该文档包含多余的 Brick Ids,我需要显示
标签: mongodb aggregation-framework