2012-02-05 122 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