2011-12-24 7 views
13

ドキュメントにアクセスするたびにviewsのカウントを1ずつインクリメントしたいと思います。これまでのところ、私のコードは:

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

$incはここに入りますか?

+0

これはあなたを助けましたか?もし私に知らせてくれないなら。 –

答えて

30

はマングースを使用していないが、すぐにあなたのために動作します、それはこのように思えるドキュメントhereを見ているん:

# 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(); 

乾杯と幸運を!

6

別の問題が発生しました。これは$ incに関連しています。他の人に役立つかもしれないので、ここに投稿します。私はしかし、これは必要なカウンタを増加させないだろう

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

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

のようなものを呼ぶだろう別のモジュールから

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 
    } 
} 

:私は、次のコードを持っています。どうやら、キーを更新オブジェクトに直接渡すことは許されていません。これは、オブジェクトフィールド名の文字列リテラルの構文と関係があります。解決策は次のように更新オブジェクトを定義することでした:

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

コードの最初のバージョンのバグは '{$ inc:{key:amount}}'です。あなたは実際にそこに 'key'変数を使用していませんが、オブジェクトのキーを文字列' 'key" 'にします。このコードを書く正しい方法は、[ES2015計算されたプロパティキー](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference)を使用して '{$ inc:{[key]:amount}}' /演算子/ Object_initializer)。 – Joseph