mongodb之mongo-go-驱动程序 : nested OR/AND query filter

mate10pro 阅读:54 2025-06-02 22:19:02 评论:0

我尝试使用嵌套运算符 (OR/AND/...) 创建 MongoDB 查询过滤器。但是 lib 需要创建一个 bson.D 并将 bson.E 元素传递给它。如果我需要在 AND/OR 中包含 OR/AND - 我需要将 bson.M + bson.D 放在 bson 中.D 像这样:

filter := bson.M{"$and": bson.D{{"p", 10}, bson.M{"$or": bson.D{{"s", 30}, {"a", 1}}}}} 

.. 当然它不起作用:不能在 slice literal 中使用 primitive.M literal(类型 primitive.M)作为 type primitive.E。如果稍后我尝试在 bson.D

中使用 ... in [] 逻辑,可能会发生同样的问题

如何在 Go 和官方 MongoDB 驱动程序中创建此类嵌套查询?

请您参考如下方法:

重要的是 $or 需要一个数组,即 bson.A .此外,$and 是默认值,您不必指明这一点。

你的过滤器可以这样定义:

filter := bson.D{ 
    {"p", 10}, 
    {"$or", bson.A{ 
        bson.D{{"s", 30}}, 
        bson.D{{"a", 10}}, 
    }}, 
} 

你也可以使用这个:

filter = bson.D{ 
    {"p", 10}, 
    {"$or", bson.A{ 
        bson.M{"s": 30}, 
        bson.M{"a": 10}, 
    }}, 
} 

或者这个:

filter := bson.M{ 
    "p": 10, 
    "$or": bson.A{ 
        bson.M{"s": 30}, 
        bson.M{"a": 10}, 
    }, 
} 


标签:mongodb
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号