为了账号安全,请及时绑定邮箱和手机立即绑定

带有 $setIntersection 的 Mongodb 聚合管道

带有 $setIntersection 的 Mongodb 聚合管道

Go
一只萌萌小番薯 2022-06-13 15:32:48
我目前正在使用 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,但不能用它们的字符串表示形式替换它们。我知道这一点,因为尽管具有共同的值,但该值始终解析为 null。我怎样才能实现这一点,或者甚至以一种简单的方式对我的查询进行建模,而无需对查询进行分块并手动查找交集?
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

在该$group阶段之后,将有 2 个文档在管道中,一个带有_id:myId和一个带有_id:personID.


该$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}

                    }},

                },

            },


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号