【问题标题】:How to update MongoDB field using value of another field [duplicate]如何使用另一个字段的值更新 MongoDB 字段 [重复]
【发布时间】:2020-05-11 12:36:55
【问题描述】:

是否可以使用另一个字段的值来更新一个字段?

这是我的架构

var timeSchema = new mongoose.Schema({
    hours: Number,
    minutes: Number
});

module.exports = mongoose.model("Time", timeSchema);

当分钟变为 0 时,我希望分钟的值为小时 * 60

这是我的代码

Time.updateMany({}, {minutes: hours * 60});

我的代码抛出一个错误,上面写着hours is not defined

有没有可能使用小时值更新分钟的方法?

【问题讨论】:

  • 这能回答你的问题吗? Update MongoDB field using value of another field
  • 它不起作用
  • @JeromeBravo:什么没用?您尝试过什么和您的数据库版本? 当分钟变成 0 是什么意思?
  • 代码:Time.updateMany({}, {$set: {minutes: $hours * 60}});它仍然说 $hours 没有定义。我的 MongoDB 版本是 4.2.5
  • @whoami 我有一个减少分钟数的功能

标签: mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

从MongoDB版本4.2开始,您可以在更新中执行聚合管道,即;您可以在updates 中使用某些聚合阶段/运算符。所以更新部分会被包裹在[]中。

试试下面的查询:

Time.updateMany({}, [{$set: {minutes: {$multiply : ['$hours', 60 ]}}}])

在上述查询中,我们使用了$set 别名$addFields 聚合阶段和$multiply 聚合运算符到多个现有的hours 60 字段并将值存储在minutes 字段中。

注意:如果.updateMany() 抛出任何错误,请尝试使用.update(){ multi : true } 选项。

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多