gpt4 book ai didi

MongoDB setIntesection 数组的数组

转载 作者:可可西里 更新时间:2023-11-01 10:43:46 26 4
gpt4 key购买 nike

我是 Mongo DB 的新手,在使聚合交集正常工作时遇到了一些麻烦。

假设我的集合中只有以下文档:

{"ids" : [ [ 1, 4, 7, 10, 13 ], [ 1, 3, 5, 7, 9, 11, 13, 15 ], [1, 3, 5, 7] ] }

我想回去

{"intersection" : [1, 7]}

我在做:

db.collection.aggregate([ {$project: {intersection:{$setIntersection:"$ids"}}} ])

但那是回归

{"intersection" : [ [ 1, 4, 7, 10, 13 ], [ 1, 3, 5, 7, 9, 11, 13, 15 ], [1, 3, 5, 7] ] }

我假设这是因为“$ids”被解释为一个整数数组的数组,而不是每个 arg 都是一个整数数组的 var-args。

知道如何让它工作吗?

最佳答案

您似乎想要查找 ids 内每个数组中出现的所有元素。

这不能用集合交集来处理,因为它们是数组元素而不是文档中的字段,并且没有办法在投影中引用单个数组元素。

这里有一个解决方法,可能有效也可能无效,具体取决于聚合需求的其余部分:

db.inter.aggregate(
{$project:{ids:1, sz:{$size:"$ids"}}},
{$unwind:"$ids"},
{$unwind:"$ids"},
{$group:{_id:{_id:"$_id",ids:"$ids"},count:{$sum:1},need:{$first:"$sz"}}},
{$project:{keep:{$eq:["$need","$count"]}}},{$match:{keep:true}},{$sort:{_id:1}},
{$group:{_id:"$_id._id",intersection:{$push:"$_id.ids"}}},
{$project:{ intersection:1}}
)

这会计算出数组的数组有多少个元素,然后计算每个数字在未展开的集合中出现的次数。如果它与大小相同,则它必须在每个子元素中。但是,这假定每个子元素不能两次具有相同的数字。

关于MongoDB setIntesection 数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com