【发布时间】:2023-03-15 04:03:01
【问题描述】:
您好,如果文档中的字段尚未更新,我正在尝试只运行一次猫鼬查询,但我对$exist、$update、@ 有点迷失了987654323@真的不知道用什么。
我有以下问题
const assignPhotoCodeToModel = (modelID, photoCode) => {
const filter = { id: modelID }
const update = { photoCode: photoCode }
const options = { new: true, useFindAndModify: false }
return new Promise((resolve, reject) => {
ModelModel.findOneAndUpdate(filter, update, options)
.then((response) => {
resolve(response)
})
.catch((error) => {
reject(error)
})
})
}
但我希望它仅在 Model.photoCode 字段为空时运行。如果它已经有一个值,我只想让它返回那个值。
我遇到的问题是,每次后端到达路由时,都会将新的 photoCode 分配给模型,即使它已经被分配。所以它会再次重新分配一个新的。
router.post(
'/payment/success',
(req, res, next) => {
...omitted_code...
photoCodeModel
.assignPhotoCodeToModel(req.body.modelId, photoCode)
... omitted_code
})
编辑:1:
好的,我在尝试这里提供的答案后写这篇文章。乍一看它们似乎可以工作,但现在我遇到了一个错误,即当 Model.photoCode 已经有一个值时,会返回以下函数:
const assignPhotoCodeToModel = (modelID, photoCode) => {
//the difference is here
const filter = { id: modelID, photoCode : null }
const update = { $set: { photoCode: photoCode } }
const options = { new: true, useFindAndModify: false }
return new Promise((resolve, reject) => {
ModelModel.findOneAndUpdate(filter, update, options)
.then((response) => {
resolve(response)
})
.catch((error) => {
reject(error)
})
})
}
返回null,而我实际上希望返回相同的模型文档。我猜是因为过滤?当我删除 photoCode : null 时,它会回到“工作”状态,但随后我又回到了 photoCode 字段填充新值的问题
基本上我希望该函数填充归档的photoCode 一次,但随后的每个调用都应该让我返回相同的模型文档
【问题讨论】: