Mongo - 通过_id更新嵌套的对象数组

Posted

技术标签:

【中文标题】Mongo - 通过_id更新嵌套的对象数组【英文标题】:Mongo - Update nested array of objects by _id 【发布时间】:2019-02-20 23:17:11 【问题描述】:

如何使用自己的 _id 访问对象数组并使用 Mongo/Mongoose 对其进行更新?

查看我的更新查询并检查是否有问题,因为此代码没有返回任何错误,但它并没有真正更新该字段

modelUser.findOneAndUpdate(
   userName: body.author, "portfolio._id": body.id ,
   new: true ,
  
    $set:   //I thing the problem it's over here
      "portfolio.$.profitLoss": profitLoss,
      "portfolio.$.percentage": percentage
    
  ,
  (err, user) => 
    if (err) 
      console.log(err);
    
    console.log(`Done`);
  
);

这是我的用户架构:

const userSchema = new Schema(
  ...stuff,
  portfolio: [
    
      coin: String,
      amount: String,
      price: String,
      bought: Date,
      profitLoss: String,
      percentage: String
    
  ],
);

基本上我认为 mongo 只是不知道这些子文档中的哪些应该更新,我不知道是否有类似 findOneAndUpdate 的子对象/文档的 id。

【问题讨论】:

架构组合中没有 _id 字段。如果添加 id 字段,查询应该可以工作。 @SergiNadal 如果您不指定 _id 是什么,则默认添加它并自行创建?还是我错了? 我不确定,我想不是!你可以很容易地检查它,在 mongo shell 中找到一个文档并浏览它,你会看到数组是否有一个 _id 字段。我通常使用 Roto 3T,在 mongo 集合中搜索,robomongo.org 【参考方案1】:

刚刚将findOneAndUpdate 更改为updateOne,一切正常。

【讨论】:

以上是关于Mongo - 通过_id更新嵌套的对象数组的主要内容,如果未能解决你的问题,请参考以下文章

Mongo更新数组内对象的多个字段

Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用

想要在 Mongo 中更新数组对象值的数组

合并数组中的两个对象,其中一个对象的键嵌套比另一个对象更深,位于 Mongo DB 的同一文档中

Mongoose:通过 findOneAndUpdate 查询使用对象数组的总和更新根数据属性不起作用

Meteor mongo 更新嵌套数组