【问题标题】:How to update the child document data in mongoose?如何更新猫鼬中的子文档数据?
【发布时间】:2021-03-11 03:54:26
【问题描述】:

我需要将 tQuan 的值更新为 15,其中 tNameFBK >股票数组。我还没有找到正确的答案。请注意,我不允许更改架构的设计方式。这是架构。

const stockSchema = mongoose.Schema(
    {
        tName: {type: String},
        tQuan: {type: Number}
    }
)

const userSchema = mongoose.Schema(
  {
    name: {type: String},
    balance: {type: Number},
    stocks: [stockSchema]
  }
);

这是它在我的 mongoDB 指南针上的样子。

MongoDB Compass

我需要在我的后端使用 mongoose 和 express,所以这不是在 CLI 中完成的。请帮我找出这个问题的答案,感谢您的帮助。

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    我找到了答案。我会把它贴在这里,以防万一这对其他人有帮助。

    User.updateOne({ name: 'Sam' , "stocks.tName" : "FBK"},
    {
      $set: {
        "stocks.$.tQuan": 15
      }
    }, (err) => {
      if(err) {
        console.error(err);
      } else {
        console.log("successfully updated");
      }
    })
    

    【讨论】:

      【解决方案2】:

      如果 stockSchema 没有单独存储在数据库中,我可以建议,我的意思是如果您只想将 stockSchema 显示为:

      user{
      _id:"id",
      name:"example",
      balance:12345,
      stoks:[
      {
      tName:"name",
      tQuan:1234,
      }
      ]
      }
      

      在用户服务或您调用保存、更新..等功能的任何地方:

      async function create(data) {
       const model = mongoose.model('User');
       let arr=[]
        //tnamesArray from your form 
        data.tnamesArray.forEach((name)=>{
         let obj={}
         obj.tName=name
         arr.push(obj)
      })
      //tQuansArray from your Form
         data.tQuansArray.forEach((quan,key)=>{
          return arr[key].tQuan=quan;
       })
       data.stocks=arr;
          const instance=new model(data);
           const savedInstance = await instance.save();
          return savedInstance;
          }

      【讨论】:

      • 恐怕这不能回答我的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 2015-06-03
      • 2020-02-26
      相关资源
      最近更新 更多