我有一个存储在MongoDB中的对象,它看起来像:
{
_id: 123
name: "xyz"
attrib:
{
address: "123 xyz rd",
phone: "123-456-7890"
}
}
我想扁平化这个结构,这样就没有attrib
字段,我只有address
和phone
字段沿着name
和_id
。
到目前为止,这是我所尝试的:
db.emp.aggregate(
{
$project : {
{ addr : '$review.attrib.address' },
{ phn : '$review.votes.phone' },
}
}
);
有人能帮我更进一步吗?
3条答案
按热度按时间zy1mlcev1#
我试过了:
更多细节,你可以看到:
use $project to rename fields
http://docs.mongodb.org/manual/reference/aggregation/project/vxqlmq5t2#
从mongodb 4.2版本开始,您可以使用
$set
和$unset
聚合管道的一次更新。short and literal选项是:
playground - literal
而泛型选项,如果你不想指定所有的内部字段,可以是:
了解它在playground example上的工作原理
对于旧版本,您可以简单地使用
$rename
/$set
和$unset
:(
$rename
只是$set
和$unset
的组合)你可以看到here
后来:
你可以看到here
bxgwgixi3#
如果你打算改变数据库中的所有文档,那么聚合框架或Map/Reduce都不是好办法。相反,您可以用自己喜欢的语言编写一个脚本,并循环遍历集合中的所有文档,逐个修改它们。