【问题标题】:Increasing one field in a MongoDB collection with Mongoose使用 Mongoose 在 MongoDB 集合中增加一个字段
【发布时间】:2012-02-06 12:27:46
【问题描述】:

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

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

正如您所见,Mongoose 的网站代码没有太大区别。

问题是,当执行这段代码时,我的集合中最终有一个名为$dec(或$inc)的字段,其中有一个对象作为{inStock : 1} 形式的字段。我只想增加集合的 inStock 条目。在我的架构中:

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

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

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。通过删除空的{},我解决了导致{"$dec" : {"inStock" : 1}} 被添加到集合中的问题。你也是对的,我使用的是旧版本的 Mongoose,但我仍然没有解决这个问题。现在看来它对收藏没有任何作用。
    • 好的,我解决了这个问题。回调函数的err 输入提供了一些信息,因为我更新了我的Mongoose 版本。我发现$dec 不存在,因此要减少我必须输入一个负数({$inc : {inStock : -1}})。感谢您的尝试,它帮助很大!
    • 你知道如何将“inStock”作为参数吗?
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 2018-08-21
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多