title: How do I write the following Mongo Aggregation Query using mgo with Golang
body: <p>I have the following query which I have tested and works, but the <code>mgo</code> </p>
  
  <pre><code>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" }
        ])
  </code></pre>
  
  <p>The <code>mgo</code> query looks like the following:</p>
  
  <pre><code>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}
  </code></pre>
  
  <p>My guess is that the <code>$filter</code> is not working. Specifically, the way I am specifying the <code>$setIsSubset</code> and arguments to that are not matching the actual mongo query above it. If I remove that section (everything within the <code>$not</code>, then it works (aside from not being the correct filter).</p>
  
  <p>I basically need the top query translated into mgo.</p>