我已经在形式的集合ABC很多MongoDB的文件:
{
....
"URL":"www.abc.com/helloWorldt/..."
.....
}
我想helloWorld的最终输出来代替helloWorldt:
{
....
"URL":"www.abc.com/helloWorld/..."
.....
}
我如何做到这一点在收集ABC的所有文件
我已经在形式的集合ABC很多MongoDB的文件:
{
....
"URL":"www.abc.com/helloWorldt/..."
.....
}
我想helloWorld的最终输出来代替helloWorldt:
{
....
"URL":"www.abc.com/helloWorld/..."
.....
}
我如何做到这一点在收集ABC的所有文件
db.media.find({mediaContainer:"ContainerS3"}).forEach(function(e,i) {
e.url=e.url.replace("//a.n.com","//b.n.com");
db.media.save(e);
});
目前,您不能使用一个字段的值更新它。 所以你必须通过文件迭代和使用功能更新每个文档。 还有,你可能怎么做,这里的例子: MongoDB的:使用来自同一文档的数据更新文件
的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});
});
});
要更换你的文档使用字符串的所有出现:
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);
});
我到所选择的答案评论(@函数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));
})
现在,你可以做到这一点!
我们可以使用脚本蒙戈操纵的飞行数据。 这个对我有用!
我用这个脚本来纠正我的地址数据。
当前地址的例子: “第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);
}
}
希望这可以帮助!
有时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/
只是,如果你在这里使用从答案的例子并获得“0更新现有记录”运行你的替换脚本时,请检查您的客户端是否连接到允许你存储/写更改的主要MongoDB的节点。