Syed Qasim Rizvi
Syed Qasim Rizvi

Reputation: 53

How to run $and operator in mgo query in Golang

I want to execute following query in MongoDB in Golang

check_select = bson.M{
            "$and": []interface{}{
                "shr_key": user_shr_key,
                "id": uid,
                "user_history": bson.M{"$elemMatch": bson.M{"action": "STOP", "message_id": mid}},
            },
        }

Please help... I am getting following error "index must be non-negative integer constant".

Upvotes: 4

Views: 9808

Answers (2)

Kevin007
Kevin007

Reputation: 183

Here You Can See , Get Values by $Match , $and Using Golang MongoDB


pipeline := []bson.M{
bson.M{"$match": bson.M{"$and": []bson.M{bson.M{"storyID": storyID}, 
bson.M{"parentID": parentID}}}}
}

Upvotes: 1

ch33hau
ch33hau

Reputation: 2951

The error is from the way you initialize an array in go:

....
"$and": []interface{}{
    "shr_key": user_shr_key,
....

go array doesn't accept string as an index.

Anyway, in order to solve your problem, remove index from array initialization and wrap the key-value pair in bson.M will do, eg:

bson.M{
            "$and": []bson.M{ // you can try this in []interface
                bson.M{"shr_key": user_shr_key},
                bson.M{"id": uid},
                bson.M{"user_history": bson.M{"$elemMatch": bson.M{"action": "STOP", "message_id": mid}}},
            },
        }

Upvotes: 11

Related Questions