如何为mongo db执行批量操作?我已经有了更改数据类型的脚本,但它没有考虑大量的数据。
Collection' store'有列名为' priceList'这是具有多个字段的数组,其中一个字段是' value'。现在它是整数,现在我想将它转换为自定义记录对象。
当前架构
store
- _id
- name [String]
- priceList [Array]
- amount [Record] //{"unscaled":<value>, "scaled", <value>}
- value [Integer]
需要将值转换为[Record],如上面所述 例如: - 值:2将变为值:{&#34;未缩放&#34;:2,&#34;缩放&#34;,0};
db.store.find({priceList: { $exists : true}}).forEach(function(obj){
obj.priceList.forEach(function(y){
y.value = ({"unscaled":NumberLong(y.value),"scaled",NumberInt(0)});
db.store.save(obj);
})
});
谢谢!
答案 0 :(得分:2)
你这样试试,
db.store.find({
priceList: {
$exists: true
}
}).forEach(function(myDoc) {
var child = myDoc.priceList;
for (var i = 0; i < child.length; i++) {
var ob = child[i];
var obj = {"unscaled":NumberLong(ob.value),"scaled":NumberInt(0)};
if ('value' in ob) {
ob.value = obj;
child[i] = ob;
}
}
db.store.update({
_id: myDoc._id
}, {
$set: {
subMenu: child
}
});
});
答案 1 :(得分:0)
希望这有助于(更新)!
db.store.find({priceList: {$exists: true}})
.toArray()
.forEach(o => db.store.update(
{_id: o._id},
{ $set: {
priceList: o.priceList.map(l => Object.assign(l, {
amount: {
unscaled: l.value,
scaled: 0
}
}))
}
}
))