2017-03-16 137 views
0

如何對mongo db執行批量操作?我已經有腳本來改變數據類型,但它並沒有考慮到巨大的音量。Mongo Db批量更新數據類型轉換操作

集合'store'有一個名爲'priceList'的列,它是具有多個字段的數組,其中一個字段是'value'。現在它是整數,現在我想將其轉換爲自定義記錄對象。

當前模式

store 
- _id 
- name [String] 
- priceList [Array] 
    - amount [Record] //{"unscaled":<value>, "scaled", <value>} 
    - value [Integer] 

需要值轉換爲[記錄]如上述格式 提到例如: - 值:2將成爲值:{ 「未縮放的」:2 「縮放」 ,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

希望這有助於(更新)!

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 
    } 
    })) 
} 
} 
)) 
+0

我不想改變價目表下整個價目表陣列只是一個字段名爲值。 – SRJ

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 
     } 
    }); 
    });