首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB - JSON解析

MongoDB - JSON解析
EN

Stack Overflow用户
提问于 2016-01-21 12:30:33
回答 1查看 90关注 0票数 2

我在MongoDB中有一个有效的JSON结构,需要在运行时进行更改。以下是一个集合中3个这样的独立文档的有效快照:

代码语言:javascript
复制
{
    company : "ABC",
    tags : ["ADMIN", "QA"],
    year : 2010,
    Project : [{
            Domain : "Telecom",
            tags : ["DEV", "ADMIN"],
            size : 15
        }, {
            Domain : "Retail",
            tags : ["ADMIN", "DEV"],
            size : 35
        }, {
            Domain : "Finance",
            tags : ["ADMIN"],
            size : 25
        }
    ]
}
{
    company : "ABC",
    tags : ["QA"],
    year : 2011,
    Project : [{
            Domain : "Telecom",
            tags : ["DEV"],
            size : 15
        }, {
            Domain : "Retail",
            tags : ["ADMIN", "DEV"],
            size : 35
        }, {
            Domain : "Finance",
            tags : ["ADMIN"],
            size : 25
        }
    ]
}
{
    company : "ABC",
    tags : ["QA"],
    year : 2012,
    Project : [{
            Domain : "Telecom",
            tags : ["DEV", "ADMIN"],
            size : 15
        }, {
            Domain : "Retail",
            tags : ["ADMIN", "DEV"],
            size : 35
        }, {
            Domain : "Finance",
            tags : ["ADMIN"],
            size : 25
        }
    ]
}

该结构需要将这3个文档合并为1,然后以下列方式显示:

代码语言:javascript
复制
{
    "company" : "ABC",
    "tags" : ["ADMIN", "QA"],
    "period" : {
        [{
                year : 2010,
                Project : [{
                        Domain : "Telecom",
                        tags : ["DEV", "ADMIN"],
                        size : 15
                    }, {
                        Domain : "Retail",
                        tags : ["ADMIN", "DEV"],
                        size : 35
                    }, {
                        Domain : "Finance",
                        tags : ["ADMIN"],
                        size : 25
                    }
                ]
            }
        ],
        [{
                year : 2011,
                Project : [{
                        Domain : "Telecom",
                        tags : ["DEV"],
                        size : 15
                    }, {
                        Domain : "Retail",
                        tags : ["ADMIN", "DEV"],
                        size : 35
                    }, {
                        Domain : "Finance",
                        tags : ["ADMIN"],
                        size : 25
                    }
                ]
            }
        ],
        [{
                year : 2012,
                Project : [{
                        Domain : "Telecom",
                        tags : ["DEV", "ADMIN"],
                        size : 15
                    }, {
                        Domain : "Retail",
                        tags : ["ADMIN", "DEV"],
                        size : 35
                    }, {
                        Domain : "Finance",
                        tags : ["ADMIN"],
                        size : 25
                    }
                ]
            }
        ]
    }
}

我知道我可以用地图减少和完成这件事。但是我想我应该尝试编写一个Java脚本函数,然后在需要的时候调用它。

假设可以使用集合调用以下函数,则将向下面的函数传递记录集。

代码语言:javascript
复制
`var curlprojects = function()
{
    var arrSyn = new Array();
    var JSONString = "";
    var doc;
    var parent;
    var arrTop = new Array();
    while (myCursor.hasNext()) 
    {
        doc = myCursor.next();
        parent = doc.companyName;
        var fulltext = "{\"year\":" + tojson(doc.year) + ",\"project\":" + tojson(doc.project) + "}";
        JSONString = JSONString + fulltext;
    };
    arrSyn.push(JSONString);
    var outext = "{\"period\":" + JSONString + "}";
    print(outext);
}   `

问题出在这里。即使文本看起来是JSON,就像我生成它或打印出来时一样,它不会打印到屏幕上。

最后一行打印(Outext)显示了一些奇怪的消息,询问我是否希望显示181个首选项,如果我说是-它列出了java脚本中的所有保留单词!

如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-22 04:54:05

作为使用MapReduce或Javascript的替代方法,您可能需要考虑使用聚合框架

您想要的输出可以使用以下方法在Mongo shell中生成:

代码语言:javascript
复制
db.test.aggregate([

  //optional: match a single company
  {$match:{"company":"ABC"}},

  //expand the "tags" array
  {$unwind:"$tags"},

  //"group by" stage:
  {$group: {

    //group by company
    _id:"$company",

    //add unique tags into the "tags" array
    tags: {$addToSet:"$tags"},

    //add the "Project" details into the "period" array
    period: {$push: {year:"$year", Project:"$Project"}}
  }}
])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34923904

复制
相关文章

相似问题

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