我有一个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"one_answers"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
我的预期结果如下:我只需要显示那些在";砖块";大堆
{
name: "page2",
"currentVersion" : {
"bricks" : [
{
"id" : 13.0
},
{
"id" : 13.0
}
]
}
}
{
"name" : "page4",
"currentVersion" : {
"bricks" : [
{
"id" : 50.0
},
{
"id" : 50.0
},
{
"id" : 70.0
}
]
}
}
提前感谢
您可以在匹配阶段使用带有聚合运算符的表达式,
$size
得到currentVersion.bricks
中的总元素$setUnion
得到currentVersion.bricks.id
中的总元素id
s,$size
tot得到总元素- 与两个大小匹配的
$ne
不应相同
db.pages.aggregate([
{
$match: {
$expr: {
$ne: [
{ $size: "$currentVersion.bricks" },
{ $size: { $setUnion: "$currentVersion.bricks.id" } }
]
}
}
}
])
游乐场
MongoDB+3.2,
$project
显示必填字段- 获取两者的大小并匹配
$eq
条件,当两者相同时将返回true,否则为false $match
isEqual为false
db.pages.aggregate([
{
$project: {
name: 1,
currentVersion: 1,
isEqual: {
$eq: [
{ $size: "$currentVersion.bricks" },
{ $size: { $setUnion: "$currentVersion.bricks.id" } }
]
}
}
},
{ $match: { isEqual: false } }
])
游乐场