【问题标题】:Update array without using $push in mongoDB在 mongoDB 中不使用 $push 更新数组
【发布时间】:2019-02-14 13:55:32
【问题描述】:
this._MyModel.findOneAndUpdate(
    { email },
    {
      $set: {
        'tradeAccount': {
          limitType,
          limit,
        }
      },
      $push: {
        'tradeAccount.history': history
      }
    }
  );

我想使用$push 将另一个对象添加到现有数组中,但同时我正在使用$set 对同一对象执行另一个更新。

我知道我不能在同一个字段上使用两个运算符,例如 ($set$push)。

我想知道是否有另一种方法可以使用$set 将另一个对象添加到现有数组中,或者是否有任何其他方法可以在同一个更新请求中执行此操作。

我正在考虑使用$set 通过检索现有历史记录并与新历史记录连接来更新数组。但这需要额外调用 db。

【问题讨论】:

    标签: arrays node.js database mongodb mongodb-query


    【解决方案1】:

    你可以使用

    this._MyModel.findOneAndUpdate(
      { email },
      {
        $set: {
          'tradeAccount'.'limitType': limitType,
          'tradeAccount'.'limit': limit
        },
        $push: {
          'tradeAccount.history': history
        }
      }
    );
    

    这应该更新 limitType 和 limit 字段,然后推送到历史记录。您不会以这种方式对同一字段执行多个查询,因为您没有直接对“tradeAccount”执行任何操作。

    【讨论】:

    • 似乎值得一试。我已经将历史更新与用户更新分开了,因为我认为这种方法非常符合SOLID 原则。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 2017-06-06
    • 2016-09-22
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多