我有一个mongodb collection
,大约有4-5百万documents
。它有一个名为"role": "admin"
的字段。我想要做的是将所有角色转换为数组,即"role": ["admin"]
。
我更喜欢not to use forEach
循环。请帮我解决一下这个。我对mongodb有点新鲜。
old documents
{
"role": "admin"
}
{
"role": "mod"
}
到new documents
{
"role": ["admin"]
}
{
"role": ["mod"]
}
答案 0 :(得分:2)
你可以使用像这样的聚合(直接来自shell):
db.collection.aggregate([
{$group: {
_id: "$_id",
role: {$push: "$role"}
}
},
{$out: "newCollection"}
])
$ group阶段将生成以下结果:
{ "_id" : ObjectId("5874a728cf097894d781d7f0"), "role" : [ "mod" ] }
{ "_id" : ObjectId("5874a724cf097894d781d7ef"), "role" : [ "admin" ] }
并且$ out会将其写入特定集合(可以是新集合或现有集合)。
在使用$ out覆盖现有集合时要小心,因为您无法撤消操作