Search code examples
mongodbgomgo

too many arguments in call to Find mgo


I was trying to search a collection with multiple field conditions using $elemMatch operator. Then I encountered an error "too many arguments in call to c.Find". Document structure is as follows:-

{
    "_id" : ObjectId("56cfca4bf23e4e2859257425"),
    "company_name" : "bank",
    "admin" : {
        "email" : "[email protected]",
        "fullname" : "xyz"
    },
    "process" : [ 
        {
            "process_name" : "Enquiry",
            "processtype" : 0,
            "sortorder" : 0
        }, 
        {
            "process_name" : "Converted",
            "processtype" : 1,
            "sortorder" : 1
        }
    ]
}

My query is as follows:-

colQuerier := bson.M{"company_name": "bank"}
match := bson.M {"process": bson.M {"$elemMatch": bson.M{"process.process_name":"Converted"}}}
err := c.Find(colQuerier,match).Sort("-id").All(&results)

What is wrong with my query? Is it any syntax error?


Solution

  • Because c.Find(https://godoc.org/gopkg.in/mgo.v2#Collection.Find) only allow one param

    You can try

    query := bson.M{
        "company_name": "bank",
        "process": bson.M{
            "$elemMatch": bson.M{"process.process_name":"Converted"}
        }
    }
    err := c.Find(query).Sort("-id").All(&results)