我曾经有两个过滤器来从我的 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,
},
},
}
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报
0/150
提交
取消