NodeJS MongoDB -按id更新特定数组元素

7fhtutme  于 2023-02-15  发布在  Node.js
关注(0)|答案(2)|浏览(95)

我做不到。
我有两个不同的模式,用户模式和生命体征模式。生命体征模式作为数组位于userSchema中。我需要做的是编辑具有唯一ID的特定vitalSigns对象
这里是一个 Postman 的信息,我需要更新的例子

const userSchema = new mongoose.Schema({
    email:{type: String, required: true},
    password:[{type: String, required: true}],
    confirmPassword:[{type: String, required: true}],
    personalData: personalDataSchema,
    vitalSigns: [vitalSignsSchema],
})
const vitalSignsSchema = new mongoose.Schema({
    systolic: { type: 'Number', required: false },
    diastolic: { type: 'Number', required: false },
    temperature: { type: 'Number', required: false },
    pulse: { type: 'Number', required: false },
    rate: { type: 'Number', required: false },
    blood: { type: 'Number', required: false },
    date: { type: 'Date', required: false },
})

我的路径同时捕获userId和vitalSigns,因为我尝试了很多方法,但都失败了

Router.post('/user/:userId/vitalSignsEdit/:vitalId', async (req, res) => {
    
    userServices.editVitalSigns(req.params.userId,req.params.vitalId, req.body)

})

下面是一个例子,我尝试使用它来使它工作,但它没有更新特定的vitalSigns ID,而是创建了另一个vitalSigns对象,具有我试图更改的相同ID。

User.findById(userId)
  .then( user => {
    if(user) {
      if(user.vitalSigns.find( e => e._id === data._id)) {
        User.updateOne({_id: userId}, { vitalSigns: [...user.vitalSigns, data] })
        .then(e => console.log(e), i => console.log(i))
      }
    }
  })

希望有人能帮我拿这些。

jgwigjjp

jgwigjjp1#

您可以使用$push

User.updateOne({_id: userId}, { $push: { vitalSigns: data } })
kyxcudwk

kyxcudwk2#

使用$访问匹配的数组元素。

db.collection.update({
  "vitalSigns._id": "vs1"
},
{
  $set: {
    "vitalSigns.$.modified": true
  }
})

Mongo Playground

相关问题