gpt4 book ai didi

MongoDB 聚合 $or 与 $elemMatch、$expr 在 $lookup 管道内

转载 作者:行者123 更新时间:2023-12-02 02:58:30 25 4
gpt4 key购买 nike

我有 2 个收藏:

用户集合:

{
_id: ObjectId
}

托托收藏:

{
_id: ObjectId
fieldA: {_id: ObjectId}
fieldB: [{_id: ObjectId}, {_id: ObjectId}]
}

我正在尝试将fieldA的idfieldB的id之一与用户的id匹配的A集合元素加入以下聚合:

db.users.aggregate([
{
$lookup: {
from: "Toto",
let: { "user_id": "$_id" },
as: "fcollection",
pipeline: [
{ $match:
{$or:[
{"fieldB": {$elemMatch: {"_id": "$$user_id"}}},
{$expr: {$eq :["$fieldA._id", "$$user_id"]}}
]}
}
]
}
])

但是在输出中,我只是获取了文档中 fieldA 的 id 匹配的位置,但没有获取 fieldB 的 id 匹配的位置。我做错了什么?

最佳答案

您需要使用$in聚合管道运算符检查数组中是否存在元素:

db.users.aggregate([
{
$lookup: {
from: "Toto",
let: {
"user_id": "$_id"
},
as: "fcollection",
pipeline: [
{
$match: {
$or: [
{
$expr: {
$in: [
"$$user_id",
"$fieldB._id"
]
}
},
{
$expr: {
$eq: [
"$fieldA._id",
"$$user_id"
]
}
}
]
}
}
]
}
}
])

测试: MongoDB-Playground

关于MongoDB 聚合 $or 与 $elemMatch、$expr 在 $lookup 管道内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60550548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com