Mongodb 如何使用mgo和Golang编写以下Mongo聚合查询

Mongodb 如何使用mgo和Golang编写以下Mongo聚合查询,mongodb,go,aggregation-framework,mgo,mongodb-aggregation,Mongodb,Go,Aggregation Framework,Mgo,Mongodb Aggregation,我有下面的查询,我已经测试并运行了,但是mgo var userId = "57a944390b1acf0d069388c1"; db.users.aggregate([ { "$match": { "_id": userID } }, { "$unwind": "$groups" }, { "$lookup": { "from": "groups", "loc

我有下面的查询,我已经测试并运行了,但是
mgo

var userId = "57a944390b1acf0d069388c1";
db.users.aggregate([
        { "$match": { "_id": userID } },
        { "$unwind": "$groups" },
        {
            "$lookup": {
                "from": "groups",
                "localField": "groups.id",
                "foreignField": "_id",
                "as": "group"
            }
        },
        { "$unwind": "$group" },
        {
            "$project": {
                "group.requests": {
                    "$filter": {
                        "input" : "$group.requests",
                        "as" : "item",
                        "cond": { "$and" : [
                                { "$ne" : ["$$item.user_id", userID] },
                                { "$not" : {
                                        "$setIsSubset" : [
                                            [userID], "$$item.denied_users"
                                        ]
                                    }
                                }
                            ]               
                        }
                    }
                }
            }
        },
        { "$unwind" : "$group.requests" }
      ])
mgo
查询如下所示:

c := session.DB(info.Db()).C("users")

    o1 := bson.M{"$match": bson.M{"_id": userID}}
    o2 := bson.M{"$unwind": "$groups"}
    o3 := bson.M{"$lookup": bson.M{
        "from":         "groups",
        "localField":   "groups.id",
        "foreignField": "_id",
        "as":           "group",
    }}
    o4 := bson.M{"$unwind": "$group"}
    o5 := bson.M{
        "$project": bson.M{
            "group.requests": bson.M{
                "$filter": bson.M{
                    "input": "$group.requests",
                    "as":    "item",
                    "cond": bson.M{
                        "$and": []bson.M{
                            bson.M{"$ne": []string{"$$item.user_id", userID}},
                            bson.M{"$not": bson.M{
                                "$setIsSubset": []interface{}{
                                    []string{userID},
                                    []string{"$$item.denied_users"},
                                },
                            }},
                        },
                    },
                },
            },
        },
    }
    o6 := bson.M{"$unwind": "$group.requests"}
    pipeline := []bson.M{o1, o2, o3, o4, o5, o6}
我猜,
$filter
不起作用。具体来说,我指定
$setIsSubset
的方式和参数与上面的实际mongo查询不匹配。如果我删除了该部分(在
$not
中的所有内容),那么它可以工作(除了不是正确的过滤器)

我基本上需要将顶部查询翻译成mgo

"$setIsSubset": []interface{}{
    []string{userID},
    []string{"$$item.denied_users"},
},
等于

"$setIsSubset" : [
    [userID], ["$$item.denied_users"]
]
所以我认为你需要这样定义它

"$setIsSubset": []interface{}{
    []string{userID},
    "$$item.denied_users",
},