在mongoDB中展平嵌套的JSON结构

时间:2013-07-29 22:24:00

标签: mongodb

我有一个存储在MongoDB中的对象,如下所示:

{
_id: 123
name: "xyz"
    attrib: 
    {
       address: "123 xyz rd",
       phone: "123-456-7890"
    }
}

我想要平展此结构,因此没有attrib字段,我只有addressphone字段以及name_id

到目前为止,这是我尝试过的:

db.emp.aggregate(
    { 
    $project : {
            { addr : '$review.attrib.address' },
            { phn : '$review.votes.phone' },
        }
    }
);

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:10)

我试过了:

db.abc.insert({
  _id: 123,
  name: "xyz",
  attrib: {
     address: "123 xyz rd",
     phone: "123-456-7890"
  }
});
db.abc.aggregate(
{ 
  $project : {
    _id:1,
    name:1,
    addr : '$attrib.address',
    phn : '$attrib.phone' 
  }
}
);

更多细节,您可以看到:use $project to rename fields http://docs.mongodb.org/manual/reference/aggregation/project/

答案 1 :(得分:2)

如果您打算更改数据库中的所有文档,那么聚合框架或Map / Reduce都无法实现。您可以用您喜欢的语言编写脚本,并循环遍历集合中的所有文档,逐个修改它们。