首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用mongo中的聚合来执行嵌入在文档中的数组中的操作?

如何使用mongo中的聚合来执行嵌入在文档中的数组中的操作?
EN

Stack Overflow用户
提问于 2018-05-01 21:12:12
回答 1查看 40关注 0票数 1

假设我有一个用户集合。每个用户都有资产。我想对资产进行一些统计度量。但是,为了能够做到这一点,我只需要将投影中的资产作为聚合的输入。如何才能做到这一点?

我希望能够对资产进行大量的聚合操作。这些操作将包括过滤、限制和跳过,因此我将使用诸如$skip$match$limit等运算符。但是,为了对嵌入式数组执行这些操作,我需要一个操作符,该操作符接受用户文档并输出嵌入到其中的资产数组。

我只想要一个操作符,该操作符接受具有以下模式的用户文档,并输出一个资产数组,然后对其执行聚合操作。

代码语言:javascript
运行
复制
user:{
   name: string,
   assets: Asset[],
   age: number
}

我尝试了这个聚合操作,但是它没有像我预期的那样工作。

代码语言:javascript
运行
复制
db.getCollection('users').aggregate( [ 
{ $match: {_id: ObjectId("5ae837dca9a8e04dd0689824")} } ,
{ $project : { assets: 1  } },
] )

它输出一个数组,其中有一个用户文档,其中嵌入资产,如下所示

代码语言:javascript
运行
复制
[{
"_id" : ObjectId("5ae837dca9a8e04dd0689824"),
"assets" : [{_id:ObjectId("1"), assetName: 'tt' }, {_id : ObjectId("2"), assetName: 'rr'}]
}] 

我需要像下面这样的输出

代码语言:javascript
运行
复制
[
{_id:ObjectId("1"), assetName: 'tt'}, 
{_id:ObjectId("2"), assetName: 'rr'}
]
EN

回答 1

Stack Overflow用户

发布于 2018-05-02 06:09:13

这样做有两个步骤(加上$match):

  • $unwind将子文档数组转换为具有一个子文档的多个文档
  • $replaceRoot将子文档提升到新的根

尝试:

代码语言:javascript
运行
复制
db.users.aggregate([
    { $match: {_id: ObjectId("5ae837dca9a8e04dd0689824")} },
    { $unwind: "$assets" },
    { $replaceRoot: { newRoot: "$assets" } }
])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50123891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档