用于数据类型转换的Mongo Db批量更新操作

时间:2017-03-16 04:20:14

标签: mongodb mongodb-query

如何为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);
   })          
});

谢谢!

2 个答案:

答案 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
    }
  }))
 }
}
))