2011-08-09 21 views
5

Belge buMongoDB'de alan nasıl değiştirilir veya güncellenir?

{title:"here", lat:123.4512, lng:36.3423, time:"2011-01-02"} 

ben bu

{title:"here", {latlng: {lat:123.4512, lng:36.3423}}, time:"2011-01-02"} 

gibi chane Belge yüzden mongodb konsol tarafından bu çalışacağız istediğim.

db.coll.find().forEach(function(u){ 
    u.latlng = {"lat":u.lat, "lng":u.lng}; 
    db.coll.save(u); 
    db.coll.update(u, {$unset:{"map_x1":1, "map_y1":1}}); 
}) 

ama çok yavaş T.T

var ben başka bir çözüm

db.coll.find().forEach(function(u){ 
    db.coll.update(u, {{"latlng" : {"lat":u.lat, "lng":u.lng}}, $unset:{"lat":1, "lng":1}}); 
}) 

düşünüyorum ama bunu çalıştıramazsınız. ilk çözüm hala çalışıyor çünkü ....

Bu iş gibi hızlı bir çözüm var mı?

cevap

10

Kişisel ikinci sorgu o tüm belge, kullanım $ seti üzerine yazılır beri bozuldu:

db.coll.find().forEach(function(u){ 
    db.coll.update(u, {$set:{"latlng" : {"lat":u.lat, "lng":u.lng}}, $unset:{"lat":1, "lng":1}}); 
}) 

orijinal girişim beri aynı güncelliyoruz gibi bu en az iki kat daha hızlı olacak Gerekli olmayan iki kez belge.

+0

Mongo bu gibi komutları nasıl kullanır? Sanırım bir çeşit tembel değerlendirme yapıyor ve belgeleri tek bir taramada belgeliyor mu? Yoksa belge için tekrar aramak ve sonra güncellemek zorunda mı? İkinci yöntemin, tüm koleksiyonun güncellenmesi için bir 0 (n^2) karmaşıklığa ihtiyacı olacaktır, bu yüzden umarım ne olduğunu değil. Bununla ilgili resmi bir belge var mı? – Savvas

İlgili konular