为了账号安全,请及时绑定邮箱和手机立即绑定

Mongo-go-driver 嵌套查询 golang

Mongo-go-driver 嵌套查询 golang

Go
胡子哥哥 2022-11-08 16:39:53
我曾经有两个过滤器来从我的 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},            }},        },    }但是它不起作用,我找不到解决方案。有没有人看到这个问题?
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我认为您正在尝试将这两个查询与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,

        },

    },

}


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信