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)