在golang mongodb中过滤

时间:2019-03-26 08:04:16

标签: mongodb go

目前,我学习使用golang和mongodb创建Restful api。其实我都是这方面的初学者。我使用mongodb-go-driver,当我们想使用find()函数时,我学会使用过滤器。但是我有一些我不理解的东西。 filter := bson.M{"_id": "abcd"}filter := bson.M{{"_id": "abcd"}}有什么区别?谢谢

3 个答案:

答案 0 :(得分:2)

请参阅源代码https://github.com/mongodb/mongo-go-driver/blob/master/bson/primitive/primitive.go

bson.D,内部是primitive.D,这是[]primitive.E,这是structbson.M,内部为primitive.M,即map[string]interface{}。您在bson.M中输入了键/值,但在bson.D中使用了文档(结构)。

最好使用2个参数来解释它,例如搜索a = 1 and b = 2。您的语法将为:bson.M{"a": 1, "b": 2}bson.D{{"a": 1}, {"b": 2}}

答案 1 :(得分:2)


    var user []models.User

    var findQuery []bson.M

    coll := db.C(constants.USERTABLE)

    if name != nil {
        if len(name) > 0 {
            query = append(query, bson.M{"name": bson.M{"$in": name}})

        }
    }

    if status != nil {
        if len(status) > 0 {
            query = append(query, bson.M{"status": bson.M{"$in": status}})

        }
    }

    findQuery = append(findQuery, bson.M{"$match": func() bson.M {
        if query != nil {
            if len(query) > 0 {
                return bson.M{"$and": query}
            }
        }
        return bson.M{}
    }()})

    shared.BsonToJSONPrint(query)

    err = coll.Pipe(findQuery).All(&user)
    if err != nil {
        return nil, err
    }
    return user, nil
}

答案 2 :(得分:1)

//Filter Part
if filter != nil {
    if len(filter.Status) > 0 {
        query = append(query, bson.M{"status": bson.M{"$in": filter.Status}})

    }
}
d.Shared.BsonToJSONPrint(query)
//Getting Total count
totalCount, err := col.Find(func() bson.M {
    if query != nil {
        if len(query) > 0 {
            return bson.M{"$and": query}
        }
    }
    return bson.M{}
}