MongoDb$筛选条件以检索数组中具有冗余值的文档



我有一个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中的总元素ids,$sizetot得到总元素
  • 与两个大小匹配的$ne不应相同
db.pages.aggregate([
{
$match: {
$expr: {
$ne: [
{ $size: "$currentVersion.bricks" },
{ $size: { $setUnion: "$currentVersion.bricks.id" } }
]
}
}
}
])

游乐场


MongoDB+3.2,

  • $project显示必填字段
  • 获取两者的大小并匹配$eq条件,当两者相同时将返回true,否则为false
  • $matchisEqual为false
db.pages.aggregate([
{
$project: {
name: 1,
currentVersion: 1,
isEqual: {
$eq: [
{ $size: "$currentVersion.bricks" },
{ $size: { $setUnion: "$currentVersion.bricks.id" } }
]
}
}
},
{ $match: { isEqual: false } }
])

游乐场

最新更新