MongoDB聚合在根中创建内部数组

Posted

技术标签:

【中文标题】MongoDB聚合在根中创建内部数组【英文标题】:MongoDB aggregation make inner array in root 【发布时间】:2021-08-03 13:06:38 【问题描述】:

您好,我有两个集合部门。这些集合具有以下属性。

我想在文档的根目录中聚合并添加一个内部数组。请在下面检查我需要的结果:

人:


  _id:ObjectID("5ff93b43535bera64de4"),
  first_name: some name,
  last_name : some name,
  dept: department1,


部门:


  dept_name: department1,
  dept_descp : this is description,
  books: [
          
           book_name: book1,
           subject: subject1,
           ,
            
           book_name: book2,
           subject: subject2,
           ,
         ]

到目前为止,我已经尝试过,但没有得到所需的结果

person.aggregate([
   
   $match:
        
            "_id": ObjectId("5ff93b43535bera64de4")
        
    ,
   
        $lookup: 
            from: "department",
            localField: "dept",
            foreignField: "dept_name",
            as: "ndept"
        
   ,
   
     $project:"books": '$ndept.books'
   
   ])

我想得到的结果是

结果:


  _id:ObjectID("5ff93b43535bera64de4"),
  first_name: some name,
  last_name : some name,
  dept: department1,
  books: [
          
           book_name: book1,
           subject: subject1,
           ,
            
           book_name: book2,
           subject: subject2,
           
         ]

【问题讨论】:

【参考方案1】:

尝试$arrayElemAt 从数组中选择第一个元素


  $addFields: 
    books:  $arrayElemAt: ["$ndept.books", 0] 
  

Playground

【讨论】:

以上是关于MongoDB聚合在根中创建内部数组的主要内容,如果未能解决你的问题,请参考以下文章

在 mongodb 聚合管道中创建价格范围方面

如何使用 mongodb (node.js) 在集合中创建一个包含所有值的数组

$eq 内部过滤器不适用于数组字段 - Mongodb

在同一集合中创建对象的 mongodb 模式数组或创建新集合的更好方法保存引用

如何使用 java spring 注释在 MongoDB 中创建一个完全填充的引用对象

MongoDB 查找与使用聚合指定的任何条件匹配的文档