小编Dav*_*ave的帖子

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

我有 2 个收藏:

用户收藏:

{
    _id: ObjectId
}
Run Code Online (Sandbox Code Playgroud)

托托系列:

{
    _id: ObjectId
    fieldA: {_id: ObjectId}
    fieldB: [{_id: ObjectId}, {_id: ObjectId}]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试加入 A 集合的元素,其中fieldA 的 id或fieldB 的 id之一与以下聚合的用户 id匹配:

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"]}}
        ]}
      }
    ]
  }
])
Run Code Online (Sandbox Code Playgroud)

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

mongodb nosql mongodb-query aggregation-framework

2
推荐指数
1
解决办法
3365
查看次数