mongodb 使用 go dynamic 查询
mongodb query with go dynamic
我想构建一个 mongo 动态查询,但在 google 中搜索,我不明白为什么第一个查询 returns 为空。
matches := []bson.M{bson.M{"$match": bson.M{"age": bson.M{"$gt": 20}}}}
err2 := coll.Find(matches).All(&persons)
这显示了预期的行数:
err2 = coll.Find(bson.M{"age": bson.M{"$gt": 20}}).All(&persons)
你能举一个简单的例子来说明如何使用两个参数构建查询吗?
谢谢。
您的第一个示例不起作用,因为 Collection.Find()
需要一个 单个过滤器文档 并且您向它传递了一片文档。
单个文档可能包含多个过滤器,例如bson.M{"age": bson.M{"$gt": 20}, "name": "Bob"}
,所以实际上这并不构成限制。
如果您有多个过滤器文档并且想要全部应用,则必须将它们“合并”到一个文档中。
一个通用的解决方案是创建一个带有 $and
键的文档(如果你希望它们在逻辑 AND 连接中,或者 $or
如果你想要逻辑 OR),其在映射中的值为过滤器切片(文档)。
就是这么简单:
// filters contains all the filters you want to apply:
filters := []bson.M{
bson.M{"age": bson.M{"$gt": 20}},
bson.M{"name": "Bob"},
}
// filter is a single filter document that merges all filters
filter := bson.M{"$and": filters}
// And then:
err := coll.Find(filter).All(&persons)
我想构建一个 mongo 动态查询,但在 google 中搜索,我不明白为什么第一个查询 returns 为空。
matches := []bson.M{bson.M{"$match": bson.M{"age": bson.M{"$gt": 20}}}}
err2 := coll.Find(matches).All(&persons)
这显示了预期的行数:
err2 = coll.Find(bson.M{"age": bson.M{"$gt": 20}}).All(&persons)
你能举一个简单的例子来说明如何使用两个参数构建查询吗?
谢谢。
您的第一个示例不起作用,因为 Collection.Find()
需要一个 单个过滤器文档 并且您向它传递了一片文档。
单个文档可能包含多个过滤器,例如bson.M{"age": bson.M{"$gt": 20}, "name": "Bob"}
,所以实际上这并不构成限制。
如果您有多个过滤器文档并且想要全部应用,则必须将它们“合并”到一个文档中。
一个通用的解决方案是创建一个带有 $and
键的文档(如果你希望它们在逻辑 AND 连接中,或者 $or
如果你想要逻辑 OR),其在映射中的值为过滤器切片(文档)。
就是这么简单:
// filters contains all the filters you want to apply:
filters := []bson.M{
bson.M{"age": bson.M{"$gt": 20}},
bson.M{"name": "Bob"},
}
// filter is a single filter document that merges all filters
filter := bson.M{"$and": filters}
// And then:
err := coll.Find(filter).All(&persons)