提问者:小点点

mongodb-$lookup无法使用$project


我试图从mongodb集合获得注册用户的列表。在我的用户列表中,我已经存储了属于另一个集合的一些其他细节。像国家,州,城市

我使用mongoDB版本3.2和聚合方法来获取我的用户列表。

在我的用户列表中,我想显示国家名称、州名称和城市名称,因此我使用$lookup加入这些集合以获取名称。

这只是一个以国家、州和城市为例的例子,它可以是我只想在一个查询中实现连接集合的任何类型的类别数据。

以下是我迄今为止所尝试的:

>

  • 这是我获得名字的第一个条件——我得到所有的名字。
  • 但是现在我也想从每个文档中只得到几个列,所以我使用了$project

    "$project": {
        "full_name": 1,
        "email": 1,
        "mobile": 1,
        "country": 1,
        "state": 1,
        "city": 1
     }
    

    第二个WHERE CONDITION-添加$project到我的where条件后,它只给我那几列没有country_name,state_name和city_name

    请告诉我为什么我的查询在使用$project后没有给出国家名、州名和城市名。

    [
       {
          "$match":{
             "status":{
                "$ne":2
             }
          }
       },
       {
          "$lookup":{
             "from":"countries",
             "localField":"country",
             "foreignField":"id",
             "as":"country_det"
          }
       },
       {
          "$lookup":{
             "from":"states",
             "localField":"state",
             "foreignField":"id",
             "as":"state_det"
          }
       },
       {
          "$lookup":{
             "from":"cities",
             "localField":"city",
             "foreignField":"id",
             "as":"city_det"
          }
       },
       {
          "$limit":10
       },
       {
          "$skip":0
       },
       {
          "$project":{
             "full_name":1,
             "email":1,
             "mobile":1,
             "country":1,
             "state":1,
             "city":1
          }
       }
    ]
    

  • 共1个答案

    匿名用户

    $project不能作为WHERE条件工作,它不能过滤记录。它作为映射器工作。(它按照指定的方式转换每个记录,这就是为什么它被命名为“项目”)。

    就你而言。此管道阶段:

    "$project":{
             "full_name":1,
             "email":1,
             "mobile":1,
             "country":1,
             "state":1,
             "city":1
          }