我试着用Mongoose上的数组更新对象.但它并不像预期的那样起作用.

我想更新邮箱和"第一"和"最后"的名字也价格数组推送新对象

{
  "email": "test@gmail.com",
  "firstName": "Test",
  "lastName": "T",
  "prices": [
    {
      "date": "2022-08-24T07:29:01.639Z",
      "price": 45
    }
  ]
}

我的更新功能

const entity = await User.findByIdAndUpdate(id, request.payload, {
                new: true,
                runValidators: true,
                context: "query",
            }).exec();

我想像这样更新.价格数组我们需要推送和更新邮箱以及名字和姓氏

{
  "email": "test@gmail.com",
  "firstName": "Test",
  "lastName": "T",
  "prices": [
    {
      "date": "2022-08-24T07:29:01.639Z",
      "price": 45
    },
    {
      "date": "2022-07-24T09:29:01.639Z",
      "price": 55
    }
  ]
}

推荐答案

您需要在更新对象内将有效负载拆分为两个操作:$set$push

User.findByIdAndUpdate(id, {
    $set: {
        email: request.payload.email,
        firstName: request.payload.firstName,
        lastName: request.payload.lastName
    },
    $push: {
        prices: {
            $each: request.payload.prices 
        }
    }
}, {
    new: true,
    runValidators: true,
    context: "query",
})

Mongodb相关问答推荐

MongoDB聚合:将文档列表转换为列表

MongoDB即使在使用索引时也很慢

如何在Mongo中查找数组中的特定对象

MongoDB:如何获取多个$indexOfArray值?

在数组对象 Mongodb 中仅 Select 需要的数组

我可以在 MongoDB 中将字段值设置为对象键吗?

MongoDB聚合:如何将查找结果放入嵌套数组中?

Mongo 删除最后的文件

Ruby on Rails 的 Cassandra、mongodb 或 couchdb

MongoDB聚合多条件

是否可以迭代 mongo 游标两次?

SELECT 字段 AS `anothername` 的 mongodb 等效项

mongodb 模式设计命名约定

MongoDB 批处理操作的最大大小是多少?

NoSQL:MongoDB 或 BigTable 并不总是 Available意味着什么

Mongodb Atlas:管理员未授权执行命令

在 Ubuntu 13.10 (saucy) 中安装 Mongodb PHP 扩展的最简单方法?

MongoDb 连接被拒绝

MongoError:Can't extract geo keys from object

有没有办法执行更新操作的dry run?