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