Mongo-go-driver 嵌套查询 golang

我曾经有两个过滤器来从我的 mongoDB 中获取数据,但是考虑到它必须对 DB 进行两次查询,我认为它效率不高。



    filter = bson.M{

        "$and": []bson.M{

            {"partnerA.id": id},

            {"unlocked": false},

            {"deletedAt": nil},

        },

    }


    filter = bson.M{

        "$and": []bson.M{

            {"partnerB.id": id},

            {"unlocked": false},

            {"deletedAt": nil},

        },

    }

我尝试使用我找到的这个解决方案将它们组合起来,并使用这个过滤器:


    filter := bson.M{

        "$and": []bson.M{

            {"partnerA.id": id},

            {"unlocked": false},

            {"deletedAt": nil},

        },

        "$or": bson.A{

            bson.M{"$and": []bson.M{

                {"partnerB.id": id},

                {"unlocked": false},

                {"deletedAt": nil},

            }},

        },

    }

但是它不起作用,我找不到解决方案。有没有人看到这个问题?


胡子哥哥
浏览 165回答 1
1回答

LEATH

我认为您正在尝试将这两个查询与OR运算符结合起来。另一件事,我看到两者之间有两个类似的子句,它是"unlocked": false和"deletedAt": nil。你可以有更短的查询,如下所示:filter := bson.M{    "$or": []bson.M{        {"partnerA.id": id},        {"partnerB.id": id},    },    "unlocked": false,    "deletedAt": nil,}更新#1如果((partnerA.id = id and partnerA.unlocked = true)或(partnerB.id = id and partnerB.unlocked = true))我只返回值的新查询怎么样?filter := bson.M{    "$or": []bson.M{        {            "partnerA.id": id,            "partnerA.unlocked": true,        },        {            "partnerB.id": id,            "partnerB.unlocked": true,        },    },}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go