2012-02-05 10 views
7

Mongooseを通じてMongoDBデータベースのコレクションの値を増やそうとしています。これは、マングースのウェブサイトで示さデモコードです:Mongooseを含むMongoDBコレクションの1つのフィールドを増やす

var conditions = { name: 'borne' } 
    , update = { $inc: { visits: 1 }} 
    , options = { multi: true }; 

Model.update(conditions, update, options, callback) 

そして、私はこのようなものがあります:あなたはマングースのウェブサイトのコードからあまり違いはありません見ることができるように

var conditions = { "uniqueId" : itemId }; 
var update; 
if(increase) 
    update = {$inc : {inStock : 1}}; 
else 
    update = {$dec : {inStock : 1}}; 
Item.update(conditions, update, {}, callback); 

を。

問題は、コードのこの部分が実行されると、Iフォーム{inStock : 1}にフィールドとしてオブジェクトを有し$dec(又は$inc)と呼ばれる私のコレクションのフィールドに有する終わるということです。私はコレクションの在庫を増やしたいだけです。スキーマで私は持っている:

var ItemToSell = new Schema({ 
    uniqueId : { type: Number, index: true } 
    , name  : String 
    , type  : String 
    , inStock : Number 
}); 

私は間違って何を指摘することができますか? ありがとうございました。

答えて

3

A)マングースが最新であることを確認してください。古いバージョンはModel.updateの操作では非常にバグがありました。新しいオブジェクトを単に渡すときにMongooseが推測しようとしました。この場合、updateオブジェクトが$setの操作に変わります。

B)空の{}を関数呼び出しから削除してみてください。これはオプションで、実際のオプションではなく空のオブジェクトを渡すことで、Mongooseが{ safe: false }オプションを設定するのを混乱させる可能性があります。これも問題を引き起こす可能性があります。私はそれが問題になるかもしれないことを確認するためにソースコードをチェックしていませんが、おそらく試してみる価値があります。

+0

返信いただきありがとうございます。空の '{}'を削除することで、{{"$ dec":{"inStock":1}} 'がコレクションに追加されるという問題を解決しました。あなたは私がMongooseの古いバージョンを使用していたという事実にも合っていましたが、まだ私は問題を解決しませんでした。今はコレクションに何もしないようです。 – Masiar

+4

私は問題を解決しました。コールバック関数の 'err'入力は私のバージョンのMongooseを更新するようになりました。私は '$ dec'が存在しないことを発見したので、減額するには負の金額を入力する必要があります(' {$ inc:{inStock:-1}} ')。試してみてくれてありがとう、それは多くの助けになった! – Masiar

+0

"** inStock **"をパラメータとしてどのように知っていますか? –

関連する問題