SORU
10 Mayıs 2010, PAZARTESİ


mongodb: Ekle Eğer yoksa

Her gün, belgelerin bir hisse (bir güncelleme) alıyorum. Yapmak istediğim şey eklemek zaten mevcut olan her madde.

  • Ben de onlara, ve bir güncelleştirme onları en son gördüğümde kattığım ilk kez izlemek istiyorum.
  • Belgelerin yinelenen istemiyorum.
  • Önceden kaydedilmiş, ama benim güncelleme olmayan bir belge kaldırmak istemiyorum.
  • Kayıtların 95% (tahmini) günden güne değişmemiş.

Python sürücüsü (pymongo) kullanıyorum.

Ben şu anda ne olduğunu (pseudo-code):

for each document in update:
      existing_document = collection.find_one(document)
      if not existing_document:
           document['insertion_date'] = now
      else:
           document = existing_document
      document['last_update_date'] = now
      my_collection.save(document)

Benim sorunum çok yavaş (daha az 100 000'den 40 dakika kayıt ve güncelleme onlardan milyonlarca var). Bir şey yapmak için yerleşik vardır eminim, ama güncellemek için belge() mmmhhh..... biraz kısa ve öz.... (http://www.mongodb.org/display/DOCS/Updating )

Birisi daha hızlı yapmak için nasıl tavsiyelerde bulunabilir?

CEVAP
27 Mayıs 2010, PERŞEMBE


Bir yapmak istiyorum "gibi". upsert MongoDB yerleşik bu desteği vardır. Güncelleme için ekstra bir parametre() çağrısı: {upsert:true}. Örneğin:

key = {'key':'value'}
data = {'key2':'value2', 'key3':'value3'};
coll.update(key, data, {upsert:true});

Bu-bulacaksınız-başka-update blok tamamen değiştirir. Anahtarı yok ve eğer varsa güncelleme varsa Ekle.

Daha önce:

{"key":"value", "key2":"Ohai."}

Sonra:

{"key":"value", "key2":"value2", "key3":"value3"}

Sana da mı yazmak istiyorum veri: belirtebilirsiniz

data = {"$set":{"key2":"value2"}}

Şimdi seçili belge" sadece ve her şey el değmemiş bırak. "key2 değeri güncellenir

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EminemVEVO

    EminemVEVO

    12 Mayıs 2009
  • HowcastFoodDrink

    HowcastFoodD

    21 EYLÜL 2010
  • Videojug

    Videojug

    25 EKİM 2006