2011-12-24 14 views
13

Belgem her erişildiğinde views sayımını 1 arttırmak istiyorum. Şimdiye kadar, benim kodudur:

Document 
    .find({}) 
    .sort('date', -1) 
    .limit(limit) 
    .exec(); 

Nerede $inc buraya uygun mu?

+0

Bu size yardımcı oldu mu? Bana haber vermezsen. –

cevap

30

mongoose kullanılan ancak hızla sizin için çalışacaktır böyle görünüyor dokümanlar here üzerinde seyir asla:

# create query conditions and update variables 
var conditions = { }, 
    update = { $inc: { views: 1 }}; 

# update documents matching condition 
Model.update(conditions, update).limit(limit).sort('date', -1).exec(); 

alkış ve iyi şanslar!

6

Başka bir soruna rastladım. Bu, $ inc ile ilgili bir tür. Bu yüzden başka birisine yardımcı olabileceğinden onu buraya göndereceğim. Aşağıdaki kod var:

var Schema = require('models/schema.js'); 

var exports = module.exports = {}; 

exports.increase = function(id, key, amount, callback){ 
    Schema.findByIdAndUpdate(id, { $inc: { key: amount }}, function(err, data){ 
     //error handling 
    } 
} 

farklı modülden ben Ancak

var saver = require('./saver.js'); 

saver.increase('555f49f1f9e81ecaf14f4748', 'counter', 1, function(err,data){ 
    //error handling 
} 

gibi bir şey çağırır, bu istenen sayacı artırmak olmaz. Görünüşe göre, anahtarı doğrudan güncelleme nesnesine iletmesine izin verilmiyor. Bu, nesne alanı adlarındaki dize değişmezleri için sözdizimi ile ilgili bir şey vardır. Çözüm şu şekilde güncelleme nesnesini tanımlamaktı:

exports.increase = function(id, key, amount, callback){ 

    var update = {}; 
    update['$inc'] = {}; 
    update['$inc'][key] = amount; 

    Schema.findByIdAndUpdate(id, update, function(err, data){ 
     //error handling 
    } 
} 
+6

Kodunuzun ilk sürümündeki hata şudur: '{$ inc: {key: amount}}'. Aslında oradaki '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' dır. Bu kodu yazmanın doğru yolu, [ES2015 hesaplanan özellik tuşları] 'nı kullanarak {$ inc: {[key]: amount}} 'dır (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/operatörler/Object_initializer). – Joseph

İlgili konular