使用Mongoose增加MongoDB集合中的一个字段

Mas*_*iar 7 mongoose node.js

我正在尝试通过Mongoose增加MongoDB数据库中集合中的值.这是Mongoose网站上显示的演示代码:

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

Model.update(conditions, update, options, callback)
Run Code Online (Sandbox Code Playgroud)

我有这样的事情:

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

正如您所看到的,与Mongoose的网站代码没有太大区别.

问题在于,当执行这段代码时,我最终在我的集合中有一个名为$dec(或$inc)的字段,其中一个对象作为表单中的字段{inStock : 1}.我只想增加该系列的inStock条目.在Schema我有:

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

谁能指出我做错了什么?非常感谢.

dan*_*ugh 3

A) 确保您的 Mongoose 是最新的。旧版本在Model.update操作上有很多错误,因为 Mongoose 会尝试推断您何时仅传递一个新对象,在这种情况下,它会将您的update对象转换为$set操作。

{}B) 尝试从函数调用中删除空值。它是可选的,通过传递空对象而不是实际选项,您可能会混淆 Mongoose 设置选项{ safe: false },这也可能导致您的问题。我还没有检查源代码来确认这可能是问题所在,但可能值得一试。

  • 好吧,我解决了这个问题。现在我更新了我的 Mongoose 版本,回调函数的“err”输入给出了一些信息。我发现 `$dec` 不存在,因此要递减,我必须输入负数 (`{$inc : {inStock : -1}}`)。感谢您的尝试,这很有帮助! (4认同)