gpt4 book ai didi

database - 具有$ setIntersection的Mongodb聚合管道

转载 作者:行者123 更新时间:2023-12-01 21:09:46 25 4
gpt4 key购买 nike

我目前正在使用golang创建一个聚合管道,在其中使用“$ or”运算符查询文档。
结果是一堆需要分组的未分组文档,这样我就可以进入下一阶段,找到两个数据集之间的交集。
然后将其用于在单独的集合中进行查找

{
"$match": bson.M{
"userID": bson.M{"$lt": afterID},
"$or": []bson.M{
// "follower": myID,
{"follower": myID},
{"follower": personID},
},
},
},
{
"$group": bson.M{
"_id": "$follower",
"followers": bson.M{"$push": "$userID"},
},
},
{
"$project": bson.M{
"common": bson.M{"$setIntersection": []interface{}{string("$" + myID.Hex() + ".followers"), string("$" + personID.Hex() + ".followers")}},
},
},
}
问题在于,在“项目”阶段,我需要以某种方式引用这些ID,尽管这些ID在进行查询之前就已经知道了,但是这些ID不能用其字符串表示形式替代。
我知道这是因为尽管具有通用值,但该值始终解析为null。
如何实现此目的,或什至以一种无需对查询进行分块和手动查找交集的简单方式对查询进行建模?

最佳答案

$group阶段之后,管道中将有2个文档,一个包含_id:myId,另一个包含_id:personID$project阶段一次在一个文档上运行,并且无法引用其他文档中的字段。
为了同时看到两者,请使用第二个小组阶段并将两个Followers数组插入一个数组数组中,然后可以使project阶段获取组合数组的前两个元素的交集。

            {
"$group": bson.M{
"_id": "$follower",
"followers": bson.M{"$push": "$userID"},
},
},
{
"$group": bson.M{
"_id": null,
"combined": bson.M{"$push": "$followers"},
},
},
{
"$project": bson.M{
"common": bson.M{"$setIntersection": []interface{}{
bson.M{"$arrayElemAt":[]interface{}{"$combined",0},
bson.M{"$arrayElemAt":[]interface{}{"$combined",1}
}},
},
},

关于database - 具有$ setIntersection的Mongodb聚合管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62585273/

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