【问题标题】:Create filter with $and condition, SQL to golang filter converter?使用 $and 条件创建过滤器,SQL 到 golang 过滤器转换器?
【发布时间】:2021-06-21 08:50:45
【问题描述】:

我目前有一个适用于 .DeleteMany 的过滤器。它会删除 _id 在给定数组 vids 中的所有条目:

filter := bson.D{{Key: "_id", Value: bson.D{{Key: "$in", Value: vids}}}}
res, err := DB.Collection("data").DeleteMany(context.TODO(), filter)

现在我想增强过滤器并添加一些 $and 条件以仅删除 _id 在给定数组 vids 中的条目和(!) providerid 的值为 1234

遗憾的是,我一直不知道如何在 go 中做到这一点。对我来说,阅读和编​​写这样的过滤器非常困难。尤其是所有 bson.D、bson.M 和 []bson.D 以及许多大括号等。

在 SQL 中,我会写 DELETE FROM data WHERE _id IN( {list} ) AND providerrid=1234;

golang mongodb过滤转换器有没有SQL?

【问题讨论】:

    标签: database mongodb go mongodb-query


    【解决方案1】:

    试试

    filter := bson.D{
        { "$and", []interface{}{
            bson.D{{ Key: "_id", Value: bson.D{{ Key: "$in", Value: vids }}}},
            bson.D{{ "providerid", 123}},
        }},
    }
    

    根据@VolkerSchmid 的评论

    filter := bson.D{ { Key: "$and", Value: []interface{}{ bson.D{{ Key: "_id", Value: bson.D{{ Key: "$in", Value: vids }}}}, bson.D{{ Key: "providerid", Value: 123}}, }}, }
    

    【讨论】:

    • 感谢 Tushar,但这会触发 VS Code 中的“go.mongodb.org/mongo-driver/bson/primitive.E 复合文字使用未键入字段”。为了摆脱这个,我需要这样写:filter := bson.D{ { Key: "$and", Value: []interface{}{ bson.D{{ Key: "_id", Value: bson .D{{ Key: "$in", Value: vids }}}}, bson.D{{ Key: "providerid", Value: 123}}, }}, } 但是是否有一些代码生成器之类的,使编写这样的过滤器更容易吗?
    • 奇怪的是 mongodb 需要我们写 10 个左大括号,10 个右大括号和一组方括号,只是为了这样一个简单的过滤器......一些生成器会很有帮助。
    • 是的,它在与 Key: 和 Value: 适配后工作。谢谢你!但我的问题的主要部分是关于 SQL 到 mongodb 的转换器。
    • Gupta 谢谢,这是一个好的开始。但它只是生成一个 mongodb 搜索过滤器。它仍然缺少所有与 golang 相关的东西,例如接口、bson.D 等……它还在我不理解的查询中添加了一些奇怪的 {"E": 1} 。但仅当查询是 DELETE 查询时。但无论如何都有帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 2016-08-10
    • 2018-09-15
    • 2014-12-21
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多