2014-02-14 31 views
0

我試圖做在命令行下修改MongoDB中的文件:如何複製和使用命令行

  1. 搜索特定文檔集合
  2. 內重複每一個找到的文件
  3. 修改每個找到的文件以相同的方式

這可以通過命令行完成嗎?我能看到的只是修改文檔的方法,這很好,但我需要先複製它們。有沒有腳本可以找到,重複,修改,然後找到下一個?

+0

_id字段呢? – KikoV

+0

@KikoV我不確定你的意思。我正在使用_id字段搜索所需的文檔。你在暗示什麼? – dwstein

+0

複製文檔,什麼是_id? – KikoV

回答

0

我想你可以實現這樣一個腳本:

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 
0

雖然複製,你必須記住,他們有不同的_id文件(其像主鍵)。您不能在具有相同_id的集合中擁有兩個文檔,這對於每個文檔都必須是唯一的(通用數據庫概念)。

現在你可以很容易地複製,如:

假設你有一個文檔結構類似這樣的

  {_id:'12345', x:1, y:2}  // assumption 

現在你可以這樣做:

  1. 搜索特定文檔收藏 - 內 - >

    var doc = db.YOUR_COLLECTION_NAME.find({_id:'12345'}); 
    
  2. 複製每個文件發現 - >

    doc._id = '54321';   //change the _id 
    db.YOUR_COLLECTION_NAME.insert(doc); //duplicated 
    
  3. 修改每個文件發現以同樣的方式

    如果要修改重複的文件,將其插入回之前做到這一點。在步驟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/