I'm having a bit of trouble creating a query using the bson functionality of mgo
. I'm simply trying to do {'search_id': {'$in': [1,2,4,7,9]}}
, but I can't work out how to do it in mgo
.
I have a slice of int
s, and tried passing that directly:
toRemove := []int{1,2,4,7,9}
err = coll.Remove(bson.M{"search_id": bson.M{"$in": toRemove}})
I saw another post which suggested I needed to use []interface{}
, but that doesn't work either:
toRemoveI := make([]interface{}, len(toRemove))
for idx, val := range toRemove {
toRemoveI[idx] = val
}
err = coll.Remove(bson.M{"search_id": bson.M{"$in": toRemoveI}})
I've looked through he docs and other questions here and on gh, but most questions involving slices seem to be about getting data into a slice as opposed to what I'm trying to achieve.
Any help would be most appreciated.
Your original proposal (passing an
[]int
value) has no flaws, it's valid to do that.What the problem is is that you use
Collection.Remove()
which finds and removes a single document matching the provided selector document. So your proposed solution will remove exactly 1 document, one whosesearch_id
is contained in the slice you passed. If no such document is found (and the session is in safe mode, seeSession.SetSafe()
),mgo.ErrNotFound
is returned.Instead use
Collection.RemoveAll()
which finds and removes all documents matching the selector: