首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有嵌套子文档的$unwind

使用带有嵌套子文档的$unwind
EN

Stack Overflow用户
提问于 2017-09-18 19:10:10
回答 1查看 1.9K关注 0票数 0

我有一个具有以下结构的集合:

代码语言:javascript
复制
{
   {
     node: 'ST20'
     Ds:{
          699:{
                   TotCM: 300
                   Docsis20: 200
                   Docsis30: 100
              }
          705:{
                   TotCM: 250
                   Docsis20: 150
                   Docsis30: 100
              }

        }
   }
   {
     node: 'ST21'
Ds:{
          651:{
                   TotCM: 200
                   Docsis20: 100
                   Docsis30: 100
              }
          699:{
                   TotCM: 100
                   Docsis20: 0
                   Docsis30: 100
              }

        }
   }
}

如您所见,我有一个表示节点的文档。每个节点,都有不同的信道。我的目标是看看我在每个频道里有多少辆出租车。从前期来看,我不知道我在每个节点中有哪些通道。所以我想要这样的东西:

代码语言:javascript
复制
{ node: 'ST20', Ds: 699, TotCM: 300, Docsis20: 200, Docsis30:100 }
{ node: 'ST20', Ds: 705, TotCM: 250, Docsis20: 150, Docsis30:100 }
{ node: 'ST21', Ds: 651, TotCM: 200, Docsis20: 100, Docsis30:100 }
{ node: 'ST21', Ds: 699, TotCM: 100, Docsis20: 0,   Docsis30:100 }

我尝试了以下查询:

代码语言:javascript
复制
db.statsNodos.aggregate(
{ $project: {_id:0,Ds:1,node:1}},
{ $unwind: "$Ds"}
).pretty()

但我拿到了原始文件。而且,如您所见,它们是嵌套的文档,而不是一个文档数组。也许我不需要使用$unwind,而且还有另一种方法可以得到这个结果。你能不能告诉我?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-19 12:42:50

给定您的示例文档结构:

代码语言:javascript
复制
{ node: 'ST21', 
  Ds: {
       "651":{ TotCM: 200, Docsis20: 100, Docsis30: 100 },
       "699":{ TotCM: 100, Docsis20: 0, Docsis30: 100 }
       }
}

您可以使用算子$objectToArray将您的字段channels名称转换为值。例如:

代码语言:javascript
复制
{"$project": {
               "_id": 0, 
               "node": 1, 
               "tmp": { "$objectToArray": "$Ds" }
             }
}, 
{"$unwind": "$tmp" }, 
{"$project": { 
               "node": 1, 
               "Ds": "$tmp.k", 
               "TotCM": "$tmp.v.TotCM", 
               "Docsis20": "$tmp.v.Docsis20", 
               "Docsis30": "$tmp.v.Docsis30"
             }
}

为了更容易地查询,我还建议重新考虑您的MongoDB数据模式

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46286550

复制
相关文章

相似问题

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