gpt4 book ai didi

node.js - 如何使用 Mongoose 中的更新查询来更新文档?

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:47 25 4
gpt4 key购买 nike

这是我的帖子模型中的评论 key 对:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const postSchema = new Schema({
user:{
type:Schema.Types.ObjectId,
// required:true,
refPath:'onModel'
},
onModel:{
type:String,
enum:['Doctor','Patient']
},
text:{
type:String,
required:true
},
comments:[{
user:{
type:Schema.Types.ObjectId,
refPath:'onModel'

},
reply:{
type:String
},
date:{
type:Date,
default:Date.now
}
}],
likes:[{
user: {
type: Schema.Types.ObjectId,
ref: 'Patient'
}
}]
})

module.exports= post = mongoose.model('post', postSchema);

当我尝试通过运行以下代码将对象推送到 Like 数组时,它失败了。过滤器部分工作正常,只是更新部分有一些问题,最终执行了 catch block 。

Post.updateOne({ _id: req.params.postid, "likes": { $ne : { user: 
authorizedData.jwt_payload.patient._id }}},
{ "$set" : { "likes.$.user": "authorizedData.jwt_payload.patient._id"
}})
.then(re => res.json(re))
.catch(err => res.json("already liked"))

非常感谢任何帮助。

最佳答案

请进行以下更改:

const mongoose = require('mongoose');

const patientObjectID = mongoose.Types.ObjectId(authorizedData.jwt_payload.patient._id);
Post.updateOne({
_id: req.params.postid,
'likes.user': {
$ne:
patientObjectID
}
},
{ $push: { likes: { user: patientObjectID } }
}).then(re => res.json(re)).catch(err => res.json("already liked"))

需要进行一些更改,因此当您拥有这样的架构时::

likes: [{
user: {
type: Schema.Types.ObjectId,
ref: 'Patient'
}
}]
  1. 您需要将 ObjectId() 传递给用户字段,而不是字符串,所以首先,我们将字符串转换为 ObjectId() 并将其传递到查询中。

  2. 此外,$set 用于更新文档中的现有字段或插入新字段,但当您想要推送时文档中数组字段的新值然后您需要使用$push(这似乎是字段上的正常更新操作,但这里我们没有替换 likes 数组,而是只是向其中添加了更多元素 - 尽管是不同类型的更新,所以这就是为什么我们需要使用 $push)。

  3. 由于您已经有以下过滤器,我们只是在执行 $push 假设我们推送的内容不是重复的,但换句话说,您可以盲目使用 $addToSet无需使用以下过滤条件即可执行相同操作:

    "likes": {
    $ne: {
    user:
    patientObjectID
    }
    }
  4. 关于 $(update) 上的问题为什么它不工作?这应该用于更新数组中的元素,它有助于根据过滤条件更新数组中的第一个匹配元素,但是您在这里想要做的是添加更多元素,但不更新 likes 中的现有元素 数组。

  5. 在这里,您不应该在 catch block 中发送“已经喜欢”,它应该是实际错误的自定义错误,在 .then(re => res.json(re)) 您需要检查更新操作的写入结果,如果有任何更新,您需要发送给添加的用户,如果没有,您需要发送“已经喜欢”。

希望这能解决您的所有问题:-)

关于node.js - 如何使用 Mongoose 中的更新查询来更新文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58996487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com