2017-09-27 127 views
0

任何一個可以幫我在下面情況下MongoDB中:查找修改,並插入到MongoDB中的同一集合

  1. 查找文檔從集合A的條件(可以說我們得到了 2個文件)
  2. 修改這兩個文檔,然後插入到相同的集合A中,不會打擾原始2個文檔。

聚合不會支持合併到同一個集合中,我通過簡單的JavaScript獲取它,但我們需要在MapReduce中。

下面是我簡單的腳本:

db.col1.find({ 
    "field1": "value" 
}).forEach(function(d1) { 
    d1.f2 = NumberInt(d1.f2/10); 
    db.col1.save(d1) 
}) 
+0

爲什麼你需要MapReduce? – chridam

+0

可能dupe https://stackoverflow.com/questions/29487351/how-to-convert-string-to-numerical-values-in-mongodb – chridam

+0

正如我之前提到的,我不想打擾原始數據,如果它是彙總,那麼輸出替換集合數據而不是合併。 如果是Java簡單腳本,那麼數據傳輸將在應用程序和數據庫服務器之間發生。所以我希望它在映射減少的情況下在數據庫服務器上執行。 – JohnWick

回答

0

之前保存修改後的專利文件1,改變其以新的ObjectId(_id),這將插入新的D1,而不是更新現有的一個:

db.col1.find({"field1" : "value"}).forEach(function(d1) 
{ 
    d1.f2 = NumberInt(d1.f2/10); 
    d1._id = ObjectId(); 
    db.col1.save(d1); 
}) 
+0

嘿,謝謝你的快速回復,但不幸的是我不是在尋找這種方法。我需要使用Mapreduce來實現同樣的功能。謝謝。 – JohnWick