MongoDB: bir alandaki her belgeyi güncelleyin


214

fooVarsayımsal olarak adlandırılmış bir koleksiyonum var.

Her örneğinde foolastLookedAt adlı bir alan vardır ve bu alan çağdan beri UNIX zaman damgasıdır. MongoDB istemcisinden geçip mevcut zaman damgasını mevcut zaman damgasına ayarlayabilmek istiyorum.

Bunu yapmanın en iyi yolu nedir?


Yanıtlar:


458

Sürüm ne olursa olsun, örneğin <update>:

{  $set: { lastLookedAt: Date.now() / 1000 }  }

Ancak, MongoDB sürümünüze bağlı olarak, sorgu farklı görünecektir. Sürüm ne olursa olsun, anahtar boş koşulun {}herhangi bir belgeyle eşleşmesidir . Mongo kabuğunda veya herhangi bir MongoDB istemcisiyle:

$ sürüm> = 3.2 :

db.foo.updateMany( {}, <update> )
  • {} koşul (boş koşul herhangi bir belgeyle eşleşir)

3.2> $ sürüm> = 2.2 :

db.foo.update( {}, <update>, { multi: true } )
  • {} koşul (boş koşul herhangi bir belgeyle eşleşir)
  • {multi: true} "birden çok belgeyi güncelle" seçeneğidir

$ sürüm <2.2 :

db.foo.update( {}, <update>, false, true )
  • {} koşul (boş koşul herhangi bir belgeyle eşleşir)
  • false" upsert " parametresi içindir
  • true "multi" parametresi içindir (birden fazla kaydı güncelleyin)

Date.now () da bir zaman damgası döndürür. Bkz. Developer.mozilla.org/tr/JavaScript/Reference/Global_Objects/…
Philippe Plantier

Hala bana bu foo örneklerinin neredeyse hiç yerinde olmayan bir tarih veriyor. Çalıştırdıktan sonra bir db.foo.findOne () ve lastLookedAt: 1327691719186, jruby-1.6.5: 011> Time.at (1327691719186) => Paz 16 Kasım 02:19:46 -0500 44042
randombits

1
Kötü POSIX zamanım saniye, Javascript zamanı ise milisaniye kullanıyor. Date.now () / 1000 çalışmalıdır. Yuvarlamanız gerekebilir.
Philippe Plantier

psh o benim için yaptı boş {}, teşekkürler Phil
Jona

1
Eski değer + "bazı dize" için nasıl
Mahesh K

11

Bu kod sizin için yararlı olacaktır

        Model.update({
            'type': "newuser"
        }, {
            $set: {
                email: "abc@gmail.com",
                phoneNumber:"0123456789"
            }
        }, {
            multi: true
        },
        function(err, result) {
            console.log(result);
            console.log(err);
        })  

4

Bir aydan fazla bir süredir MongoDB .NET sürücüsünü kullanıyorum. .NET sürücüsünü kullanarak yapsaydım, koleksiyon nesnesinde Güncelleme yöntemini kullanırdım. İlk olarak, ilgilendiğim tüm belgeleri alacak bir sorgu oluşturacağım ve değiştirmek istediğim alanlarda Güncelleme yapacağım. Moğol'daki güncelleme sadece ilk belgeyi etkiler ve sorgudan kaynaklanan tüm belgelerin güncellenmesi için 'Çoklu' güncelleme bayrağını kullanması gerekir. Örnek kod aşağıdadır ...

var collection = db.GetCollection("Foo");
var query = Query.GTE("No", 1); // need to construct in such a way that it will give all 20K //docs.
var update = Update.Set("timestamp", datetime.UtcNow);
collection.Update(query, update, UpdateFlags.Multi);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.