2012-02-05 125 views
7

增加一個字段在MongoDB中收集我想通過我的貓鼬的MongoDB數據庫中增加一個集合中的值。這是貓鼬的網站上顯示的演示代碼:與貓鼬

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

正如你可以看到有沒有從貓鼬的網站代碼太大的差別。

的問題是,執行該塊的代碼時,我最終我的收藏一個場稱爲$dec(或$inc)在具有本發明的目的如在形式{inStock : 1}的字段。我只想增加收藏中的inStock條目。在架構我有:

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

任何人都可以指出我做錯了什麼? 非常感謝。

回答

3

A)確保你的貓鼬是最新的更新。舊版本非常的Model.update操作越野車,因爲貓鼬會嘗試當你只是一個傳遞一個新的對象,在這種情況下,它變成你update對象爲$set操作來推斷。

B)嘗試從你的函數調用刪除空{}。這是可選的,通過傳遞一個空對象而不是實際的選項,你可能會混淆Mongoose設置{ safe: false }選項,這也可能導致你的問題。我沒有檢查源代碼來確認這可能是問題,但它可能值得一試。

+0

感謝您的回覆。通過刪除空的'{}'我解決了導致集合中添加'{「$ dec」:{「inStock」:1}}「的問題。你說的也對,因爲我使用的是Mongoose的老版本,但我仍然沒有解決這個問題。現在看來它對集合完全沒有做任何事情。 – Masiar 2012-02-06 12:07:59

+4

好的,我解決了這個問題。回調函數的'err'輸入給了我更新我的Mongoose版本的東西。我發現'$ dec'不存在,因此爲了遞減,我必須輸入一個負數('{$ inc:{inStock:-1}}')。感謝您嘗試一下,它幫助了很多! – Masiar 2012-02-06 15:12:12

+0

你知道如何以「** inStock **」作爲參數嗎? – 2014-06-25 11:47:41