如何在mongoDB中为集合中的所有文档投影对象数组中的元素

guykilcj  于 2022-12-03  发布在  Go
关注(0)|答案(2)|浏览(152)

我的公司集合中有一个对象数组,其中包含如下分组值:

"groups" : [
        {
            "id" : "d278c44333",
            "name" : "group 1"
        }
    ],

所以在mongoDB中它应该是company > groups > 0 > id or name
我想投影所有包含groups对象数组的文档并检索名称。
我怎么能那样做呢?
下面是我尝试的:

db.getCollection("Company").aggregate([
            
    {
        $match: { 
            "companyID": "323452343",

        }
    },

    {
        $project: { 
            //this only projects groupName with an array with 0 elements inside.
            groupName: "$groups.0.name"

         }
        
    }

])

编辑:
预期结果:

7y4bm7vi

7y4bm7vi1#

对于第一项的具体情况,用途:

db.collection.aggregate([
  {
    $project: {
      groupName: {
        $first: "$groups.name"
      }
    }
  }
])

了解它在playground example上的工作原理
对于低于4.2的mongodb版本,请用途:

db.collection.aggregate([
  {
    $project: {
      groupName: {
        $arrayElemAt: ["$groups.name", 0]
      }
    }
  }
])
vh0rcniy

vh0rcniy2#

我终于找到了正确的方法来查询和投影对象的嵌套数组,如下所示:
我不得不这样使用$arrayElemAt

db.getCollection("Comapny").aggregate([
            
    {
        $match: { 
            "companyID": "123456789",
              
               
        }
    },
    
    {
        $sort: { _updated_at: -1 }
    },
        
    {
        $project: { 
            _id: "$_id",
           
            groups: {$arrayElemAt: [ "$groups.name", 0 ] },               

         }
        
    }

])

相关问题