Mongo

2010-09-09 27 views
6

mevcut verilere dayanarak güncellenmesi Bir mongo noob sıralama ve ben bu sorunu yanlış yönde ele alıyorum bir duygu var.Mongo

Yaklaşık 7 milyon belge koleksiyonum var. Her bir belgenin (yerine) değiştirmesini istediğim iki alanı vardır, temel olarak \\n olan büyük dizelerdir ve bunları \n ile değiştirmek istiyorum.

Tamamen mevcut olmayan sorgu tarafından döndürülen nesneyi "geri göndermeye" yönelik bir yol bulmaya çalışmak için yaklaşık bir saat harcadım. Böyle bir şey için en iyi yaklaşım nedir? Bir Upsert tüm belgelerde sorgulamak ve onları teker teker güncellemek gerekecek http://www.mongodb.org/display/DOCS/Updating#Updating-UpsertswithModifiers

cevap

6

yapıyor Ne istiyorsun

+0

Neredeyse aradığım şey :) –

+0

Ouch, bu kıvrımlı olmayacağını umuyordum ... –

0

.

mydb = db.getSisterDB("whateverDBYoureUsing"); 
var cursor = mydb.foo.find(); 
while (cursor.hasNext()) { 
    var x = cursor.next(); 

    /* replace \\n with \n in x's strings ... */ 

    db.foo.update({_id : x._id}, x); 
} 

Sen, bir .js dosyası içine (diyelim ki, replace.js) bu kopya db ve toplama isimlerini değiştirebilir ve bir komut dosyası olarak çalıştırabilirsiniz: JavaScript bunu yaparsanız, bir şey gibi olurdu kabuktan:

mongo replace.js 
+0

Bunun için hangi güncelleme değiştiricisini kullanırdı? – Thilo

+0

@Thilo: Aslında Kristina'nın önerdiği gibi aynı şeyler. Daha az detaylandırılmış cevap, ama aynı. Bu yüzden anlamıyorum, neden Markus "-2" için aldı. – noncom