目前,我学习使用golang和mongodb创建Restful api。其实我都是这方面的初学者。我使用mongodb-go-driver,当我们想使用find()
函数时,我学会使用过滤器。但是我有一些我不理解的东西。 filter := bson.M{"_id": "abcd"}
和filter := bson.M{{"_id": "abcd"}}
有什么区别?谢谢
答案 0 :(得分:2)
请参阅源代码https://github.com/mongodb/mongo-go-driver/blob/master/bson/primitive/primitive.go
bson.D
,内部是primitive.D
,这是[]primitive.E
,这是struct
。 bson.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{}
}