Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Mongodb聚合管道与$setIntersection_Database_Mongodb_Go_Aggregation Framework - Fatal编程技术网

Database Mongodb聚合管道与$setIntersection

Database Mongodb聚合管道与$setIntersection,database,mongodb,go,aggregation-framework,Database,Mongodb,Go,Aggregation Framework,我目前正在使用golang创建一个聚合管道,在这里我使用“$or”操作符查询文档 结果是一堆未分组的文档,我需要对这些文档进行分组,以便可以进入下一阶段,找到两个数据集之间的交集。 然后,这将用于在单独的集合中进行查找 { "$match": bson.M{ "userID": bson.M{"$lt": afterID},

我目前正在使用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
阶段之后,将有两个文档在管道中,一个具有
\u id:myId
,另一个具有
\u id:personID

$project
阶段一次操作一个文档,不能引用其他文档中的字段

为了同时看到这两个元素,请使用第二个group阶段并将两个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}
                    }},
                },
            },

虽然你的代码有一些语法错误,但我想不出有什么是Cheki Nlikua nmepitia hio,谢谢。很高兴从各地了解kuna msee ako类似行业