我試圖做在命令行下修改MongoDB中的文件:如何複製和使用命令行
- 搜索特定文檔集合
- 內重複每一個找到的文件
- 修改每個找到的文件以相同的方式
這可以通過命令行完成嗎?我能看到的只是修改文檔的方法,這很好,但我需要先複製它們。有沒有腳本可以找到,重複,修改,然後找到下一個?
我試圖做在命令行下修改MongoDB中的文件:如何複製和使用命令行
這可以通過命令行完成嗎?我能看到的只是修改文檔的方法,這很好,但我需要先複製它們。有沒有腳本可以找到,重複,修改,然後找到下一個?
我想你可以實現這樣一個腳本:
var cursor = db.mycollection.find({ **criteria** });
while (cursor.hasNext()) {
var x = cursor.next();
var field1 = x.field1;
// Perform the changes
.
.
var field1T = field1.replace(/aaa/g, 'a');
.
.
x.field1 = field1T;
// this will create a dup
delete x._id // I'm not sure if it's delete or unset. I can't test now
db.mycollection.insert(x);
};
然後調用它
# mongo localhost/mydatabase myscript.js
雖然複製,你必須記住,他們有不同的_id文件(其像主鍵)。您不能在具有相同_id的集合中擁有兩個文檔,這對於每個文檔都必須是唯一的(通用數據庫概念)。
現在你可以很容易地複製,如:
假設你有一個文檔結構類似這樣的
{_id:'12345', x:1, y:2} // assumption
現在你可以這樣做:
搜索特定文檔收藏 - 內 - >
var doc = db.YOUR_COLLECTION_NAME.find({_id:'12345'});
複製每個文件發現 - >
doc._id = '54321'; //change the _id
db.YOUR_COLLECTION_NAME.insert(doc); //duplicated
修改每個文件發現以同樣的方式
如果要修改重複的文件,將其插入回之前做到這一點。在步驟2中
現在對於許多文件,創建一個名爲dup.js(假設),寫在之後它的文件:
var cur = db.YOUR_COLLECTION_NAME.find({QUERY_HERE});
while(cur.hasNext()){
var doc = cur.next();
//change _id of doc to a new value and also do other modifications here
db.YOUR_COLLECTION_NAME.insert(doc);
}
要運行shell腳本做:
mongo localhost:27017/YOUR_DB_NAME dup.js
要理解寫讀劇本:
http://docs.mongodb.org/manual/tutorial/write-scripts-for-the-mongo-shell/
_id字段呢? – KikoV
@KikoV我不確定你的意思。我正在使用_id字段搜索所需的文檔。你在暗示什麼? – dwstein
複製文檔,什麼是_id? – KikoV