如何更换MongoDB的文档中的子(How to replace substring in mong

2019-06-18 07:28发布

我已经在形式的集合ABC很多MongoDB的文件:

{
....
"URL":"www.abc.com/helloWorldt/..."
.....
}

我想helloWorld的最终输出来代替helloWorldt:

{
....
"URL":"www.abc.com/helloWorld/..."
.....
}

我如何做到这一点在收集ABC的所有文件

Answer 1:

db.media.find({mediaContainer:"ContainerS3"}).forEach(function(e,i) {
    e.url=e.url.replace("//a.n.com","//b.n.com");
    db.media.save(e);
});


Answer 2:

目前,您不能使用一个字段的值更新它。 所以你必须通过文件迭代和使用功能更新每个文档。 还有,你可能怎么做,这里的例子: MongoDB的:使用来自同一文档的数据更新文件



Answer 3:

的NodeJS。 使用从NPM MongoDB的包

db.collection('ABC').find({url: /helloWorldt/}).toArray((err, docs) => {
  docs.forEach(doc => {
    let URL = doc.URL.replace('helloWorldt', 'helloWorld');
    db.collection('ABC').updateOne({_id: doc._id}, {URL});
  });
});


Answer 4:

要更换你的文档使用字符串的所有出现:

db.media.find({mediaContainer:"ContainerS3"}).forEach(function(e,i) {
var find = "//a.n.com";
var re = new RegExp(find, 'g');
e.url=e.url.replace(re,"//b.n.com");
db.media.save(e);
});


Answer 5:

我到所选择的答案评论(@函数naveed的答案)的格式已经得到了炒 - 因此增加这作为一个答案。 一切归功于函数naveed。

-------------------------------------------------- --------------------

只是真棒。 我的情况是 - 我有一个字段是一个数组 - 所以我不得不添加额外的循环。

我的查询是:

db.getCollection("profile").find({"photos": {$ne: "" }}).forEach(function(e,i) {
    e.photos.forEach(function(url, j) {
        url = url.replace("http://a.com", "https://dev.a.com");
        e.photos[j] = url;
    });
    db.getCollection("profile").save(e);
    eval(printjson(e));
})


Answer 6:

现在,你可以做到这一点!

我们可以使用脚本蒙戈操纵的飞行数据。 这个对我有用!

我用这个脚本来纠正我的地址数据。

当前地址的例子: “第12号,FIFTH AVENUE”。

我想删除最后多余的逗号,预期新地址“” 12号,第五大道”。

var cursor = db.myCollection.find().limit(100);

while (cursor.hasNext()) {
  var currentDocument = cursor.next();

  var address = currentDocument['address'];
  var lastPosition = address.length - 1;

  var lastChar = address.charAt(lastPosition);

  if (lastChar == ",") {

    var newAddress = address.slice(0, lastPosition);


    currentDocument['address'] = newAddress;

    db.localbizs.update({_id: currentDocument._id}, currentDocument);

  }
}

希望这可以帮助!



Answer 7:

使用mongodump,bsondump和mongoimport。

有时MongoDB的藏品能得到一点复杂的嵌套数组/对象等在那里会比较难以建立他们周围循环。 我的解决办法是有点生,但无论在大多数情况下工作收集的复杂性。

1.出口使用mongodump到.bson收集

mongodump --db=<db_name> --collection=<products> --out=data/

2.转换成.bson格式上传.json使用bsondump

bsondump --outFile products.json data/<db_name>/products.bson

3. sed的(对于Linux终端)或与任何其他的工具更换在上传.json文件中的字符串

sed -i 's/oldstring/newstring/g' products.json

4.导入回以.json收集与--drop标签mongoimport哪里会导入之前删除图片集

mongoimport --db=<db_name>  --drop --collection products <products.json

另外,您可以使用--uri在这两个mongoimport和mongodump连接

mongodump --uri "mongodb://mongoadmin:mystrongpassword@10.148.0.7:27017,10.148.0.8:27017,10.148.0.9:27017/my-dbs?replicaSet=rs0&authSource=admin" --collection=products --out=data/


Answer 8:

只是,如果你在这里使用从答案的例子并获得“0更新现有记录”运行你的替换脚本时,请检查您的客户端是否连接到允许你存储/写更改的主要MongoDB的节点。



文章来源: How to replace substring in mongodb document