【问题标题】:How to replace string in mongodb collection with arrays如何用数组替换mongodb集合中的字符串
【发布时间】:2017-01-26 06:14:36
【问题描述】:

我的FoodRecord 记录包含如下内容:

"_modifierRecords" : [
    "com.domain.data.REM.FoodModifierRecord:57919e6930049c15986e7c05"
    "com.domain.data.REM.FoodModifierRecord:57919e6930049c15986e7c06"
], 
"_discountModifierRecords" : [

], 
"_salesRecord" : "com.domain.data.REM.SalesRecord:57919e6930049c15986e7c01"

如果上面的 3 个字段中存在 com.domain.data.REM.,我需要将它们替换为 com.domain.data.

这是我目前所拥有的,但我遇到了问题:

var operations = [];
db.FoodRecord.find().forEach(function(doc) {
    var operation = {
        updateOne: { 
            filter: { '_id': doc._id }, 
            update: { 
                '$set': { '_salesRecord': doc._salesRecord.replace('com.domain.data.REM.SalesRecord:', 'com.domain.data.SalesRecord:'),
                  '_modifierRecords.$' : doc._modifierRecords.$.replace('com.domain.data.REM.FoodModifierRecord:', 'com.domain.data.FoodModifierRecord:') }
            }
        }
    };
    operations.push(operation);
})

operations.push({ 
    ordered: true, 
    writeConcern: { w: "majority", wtimeout: 5000 } 
})

db.FoodRecord.bulkWrite(operations, { ordered : false });

【问题讨论】:

  • 你的 MongoDB 版本是多少?
  • 目前我的数据库版本是 3.2.8 我相信

标签: arrays mongodb mongodb-query


【解决方案1】:

该解决方案似乎可行,但这可能不是最佳解决方案。

db.FoodRecord.find(/* your query */).forEach(function(e,i){
    var newArr = [];
    e._salesRecord.forEach(function(e,i) {
         newArr.push(e.replace('REM.SalesRecord','SalesRecord'));
    });
    e._salesRecord = newArr;
    newArr = [];
    e._modifierRecords.forEach(function(e,i) {
         newArr.push(e.replace('REM.FoodModifierRecord','FoodModifierRecord'));
    });
    e._modifierRecords = newArr;
    db.FoodRecord.save(e);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2013-01-28
    • 2015-12-25
    • 2013-11-08
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多