【问题标题】:Mongoose: value not incrementing through $incMongoose:值不通过 $inc 递增
【发布时间】:2020-07-06 16:02:38
【问题描述】:

我已经为这个问题苦苦挣扎了好几天。由于某种未知原因,无论我尝试何种替代方法,特定字段(“reviewCounts”)都不会增加。

这是我的架构

let itemSchema = new mongoose.Schema({
        rank: Number,
        image: String,
        name: String,
        title: String,
        count: Number,
        category: String,
        ratings: Object,
        reviewCounts: Number,
        reviews: Array,
        tags: Object,
    })

这是更新方法:

Item.findOneAndUpdate({name: item,title:title}, {
     $inc:{"reviewCounts":1},
     $set:averageQuery,
     $inc:query
     },{strict:false},
     function (err, data) {
     }
}

$inc 完全可以在“查询”上找到,但它不会增加“reviewCounts”。我曾尝试使用$set 手动设置该值,但这也不起作用。我仔细检查并确认该字段是 int32 符合预期。这个问题背后的原因可能是什么?

【问题讨论】:

  • 你能试试像$inc:{ ...query, "reviewCounts":1 }这样的单一$inc吗?
  • @mickl 成功了!谢谢!请问您的方法有效的原因是什么? mongoose 不允许多个 $inc 吗?

标签: javascript mongodb mongoose mongodb-query


【解决方案1】:

当您以这种方式构建更新语句时:

{
    $inc:{"reviewCounts":1},
    $set:averageQuery,
    $inc:query
}

您正在复制 JavaScript 对象中的 $inc 键。 JavaScript 将这样的代码解释为:

{
    $set:averageQuery,
    $inc:query
}

所以只是最后一次使用特定键“获胜”,因此你失去了reviewCounts 部分。

您需要确保只有一个$inc,并且您可以使用扩展运算符来组合您的$inc

$inc:{ ...query, "reviewCounts":1 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 2020-09-14
    • 2019-01-09
    • 2012-09-18
    • 2012-01-27
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多