从猫鼬聚合管道中的数组数组中获取单个数组

Posted

技术标签:

【中文标题】从猫鼬聚合管道中的数组数组中获取单个数组【英文标题】:Get single array from array of array in mongoose aggregate pipeline 【发布时间】:2021-04-15 15:21:18 【问题描述】:

我有一个这样的集合(我从上一个管道条件中得到的):

[
_id:"1","field":[...obj1,...obj2],
_id:"2","field":[...obj3,...obj1],
_id:"3","field":[...obj4,...obj5],
_id:"4","field":[...obj1,...obj2],
]

我想在管道中添加更多条件来获取:

[...obj1,...obj2,...obj3,...obj4,...obj5]

顺序无关紧要,但我想要来自field 的所有对象。我是 mongo 和 mongoose 的新手,所以我不知道哪个聚合属性可以在这里工作。

请帮助我,我认为这是一项简单的任务,但由于缺乏知识,我无法做到。

【问题讨论】:

【参考方案1】: $unwind 解构field 数组, $replaceRoot 将 field 对象替换为根
 $unwind: "$field" ,
 $replaceRoot:  newRoot: "$field"  

Playground


对于独特的对象,在$unwind 阶段之后尝试$group 阶段,

  
    $group: 
      _id: "$field.name",
      field:  $first: "$field" 
    
  ,

Playground

【讨论】:

不要为投票而烦恼,只需按照how-to-ask问题的说明进行操作, 实际上我也只想要使用 $group 和 $addToSet 实现的唯一对象(如示例中所示)。我希望您将使用此更新答案,以便其他人也可以得到帮助:)

以上是关于从猫鼬聚合管道中的数组数组中获取单个数组的主要内容,如果未能解决你的问题,请参考以下文章

从猫鼬中的数组中删除元素

从猫鼬中的数组对象中选择特定项目

查询父项时如何获取猫鼬子文档数组中的值的聚合总和?

如何使用节点 js 从猫鼬模式中读取嵌套数组元素?

如何从猫鼬的数组中找到对象

猫鼬聚合按字段排序一个数组