db.Product.aggregate([
{
$match: {
$or: [
{
"message": {
$regex: "he"
}
},
{
"field3": {
$regex: "s"
}
}
]
}
},
{
$lookup: {
from: "User",
localField: "_id",
foreignField: "favorite",
as: "join"
}
},
{
$addFields: {
favorited: {
$cond: [
{
$in: [
"$_id",
"$join.favorite"
]
},
true,
false
]
}
}
}
])
我很困惑為什么這不起作用。它應該回傳 true,但我沒有得到預期的結果。我可以使它與 $function 一起作業,但我不能使用 $function,因為我使用的 MongoDB 版本是 4.2 而不是 $function 所需的 4.4。
[
{
"_id": "60508eeb52a2ab598a013bb9",
"favorited": false,
"field1": false,
"field2": 1,
"field3": "something",
"join": [],
"message": "hello"
},
{
"_id": "60508f4152a2ab598a013bbb",
"favorited": true,
"field1": false,
"field2": 1,
"field3": "s1",
"join": [
{
"_id": ObjectId("60508f4152a2ab598a013bbb"),
"aId": ObjectId("60508f2852a2ab598a013bba"),
"favorite": [
"60508f4152a2ab598a013bbb",
"60508f4552a2ab598a013bbc"
]
},
{
"_id": ObjectId("60508f4552a2ab598a013bbc"),
"aId": ObjectId("60508f2852a2ab598a013bba"),
"favorite": [
"60508f4152a2ab598a013bbb",
"60508f4552a2ab598a013bbc"
]
},
{
"_id": ObjectId("605090a452a2ab598a013bbd"),
"aId": ObjectId("60508eeb52a2ab598a013bb9"),
"favorite": [
"60508f4152a2ab598a013bbb",
"60508f4552a2ab598a013bbc"
]
}
],
"message": "hello"
},
{
"_id": "60508f2852a2ab665a013bba",
"favorited": false,
"field1": false,
"field2": 1,
"field3": "s1",
"join": [],
"message": "hello"
}
]
我期待上述結果。
https://mongoplayground.net/p/kM80POZ8rSq
運算式可以包括欄位路徑、文字、系統變數、運算式物件和運算式運算子。運算式可以嵌套。
https://www.mongodb.com/docs/manual/meta/aggregation-quick-reference/#std-label-aggregation-expressions
uj5u.com熱心網友回復:
如果您嘗試讀取favoritein的值join,它會回傳:
{
"join": [
"favorite": [
"value1",
"value2"
]
]
}
因此,當您使用 查詢時join.favorite,它會回傳一個嵌套陣列:
[ ["value1", "value2"] ]
您需要先展平陣列,然后再$in通過$reduce.
{
$reduce: {
input: "$join",
initialValue: [],
in: {
$concatArrays: [
"$$value",
"$$this.favorite"
]
}
}
}
完成查詢
db.testA.aggregate([
{
$match: {
$or: [
{
"message": {
$regex: "he"
}
},
{
"field3": {
$regex: "s"
}
}
]
}
},
{
$lookup: {
from: "testB",
localField: "_id",
foreignField: "favorite",
as: "join"
}
},
{
$addFields: {
favorite: {
$cond: [
{
$in: [
"$_id",
{
$reduce: {
input: "$join",
initialValue: [],
in: {
$concatArrays: [
"$$value",
"$$this.favorite"
]
}
}
}
]
},
true,
false
]
}
}
}
])
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/489444.html
上一篇:Mongoose陣列中的值
