try 在Mongo DB中使用此$LOOKUP查询.

db.request_user.aggregate( [
   {
      $lookup:
         {
           from: 'request',
           let: {req_id: "$requestId",curr_user:"$user"},
           pipeline: [
              { $match:
                 { $expr:
                    { $and:
                       [
                         {$eq: [ "$requestId","$$req_id"]}
                         {$eq: [ "$currentUser","$$curr_user"]}
                       ]
                    }
                 }
              },
           ],
           as: "result"
         }
    }
] )

我收到以下错误:

{
    "message" : "arguments to $lookup must be strings, let: { req_id: '$requestId' } is type object",
    "ok" : 0,
    "code" : 4570,
    "codeName" : "Location4570"
}

找到一些来源,说let与MongoDB 3~版本不兼容.我使用的是3.4版.如果这是真的..能不能请一些人推荐一种替代方案.

推荐答案

正如我在 comments 中提到的,这种$lookup语法只有从3.6版开始才可用.另一种方法是使用"旧的"$lookup语法,它只允许在单个字段上进行联接. 然后根据另一个条件添加额外的筛选,如下所示:

db.request_user.aggregate( [
    {
        $lookup:
            {
                from: 'request',
                localField: "user",
                foreignField: "currentUser",
                as: "result"
            }
    },
    {
        $addFields: {
            result: {
                $filter: {
                    input: "$result",
                    cond: {$eq: ["$$this.requestId", "$requestId"]}
                }
            }
        }
    }
] )

如果使用与原始$lookup中的较少文档匹配的字段和$filter表达式中的另一个字段,则效果会更好,只有您才能知道基于您的数据的分布.

Mongodb相关问答推荐

Mongodb如果数组中有外部键,则将排序应用到查找结果

在提供的文档(_Id)之后和之前,是否有一个Mongo操作来获取已排序(和/或过滤)集合中的文档计数?

MongoDB Aggregate 根据时间进行多重分组

多键索引,性能问题

MongoDB DB参考返回null值

从MongoDB迁移到PostgreSQL:为PostgreSQL编写聚合管道查询

MongoDB 聚合 $match 阶段与条件查询

在mongodb中,如何使用聚合来获取字段之间的对应关系

如何在mongodb中级联删除文档?

mongoose中的 required是什么意思?

Clojure 和 NoSQL 数据库

从 LinkedHashMap 转换为 Json 字符串

嵌套数组内的Mongodb增量值

使用 Mongoid 和 Ruby 查询最近 30 天的日期范围?

MongoError:Topology is closed, please connect despite established database connection

没有参考选项的mongoose填充字段

Flask:设置应用程序和请求特定的属性?

如何使用 Pymongo 在 MongoDB 中 Select 单个字段?

使用自定义 _id 值时 mongodb 中的 Upserts

Mongoid 不在查询中