我曾經有兩個過濾器來從我的 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},
}},
},
}
但是它不起作用,我找不到解決方案。有沒有人看到這個問題?
謝謝你。
uj5u.com熱心網友回復:
我認為您正在嘗試將這兩個查詢與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,
},
},
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/429825.html
上一篇:如何測驗使用中間件的處理程式
