我在MongoDB中具有以下集合:
shop: {
products: [{
(...)
_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Product',
unique: true
},
dateAdded: {
type: Date,
default: Date.now,
required: true
},
dateModified: {
type: Date,
default: Date.now,
},
}]
}
根据它们的名称,其中包含产品创建的日期和产品的更新日期。
我正在更新这样的产品:
Shop.findOneAndUpdate({
_id: shopId,
"products._id": prod._id
},
{
"$set": {
"products.$": prod
}
},
{
new: true,
upsert: true
})
'prod'并不包含产品的所有字段,因此我使用$ set仅保存我提供的字段,而不是清除这些字段。
'prod'确实包含_id字段和dateModified值,但不包含dateAdded,但是该字段实际上是使用Date.now值更新的,这导致该dateAdded和dateModified始终具有相同的值。
我该如何解决? dateAdded仅在他为空时才可以填充,但是由于我在这里进行更新,因此可以假定该字段有一个值。
编辑重复标记 这个问题与_id字段无关,它工作正常,只是为了使这个问题更清楚而添加。关于另一个字段(dateAdded)的默认值
编辑2
按照标记的问题,我将查询更改为此:
Shop.update({
_id: shopId,
"products._id": prod._id
},{
"$set": {
"products.$": prod
}
},{
new: true
})
因此,我将findOneAndUpdate()
更改为update()
并删除了upsert:true
选项,但是dateCreated仍然用date.now()
更新。我错过了什么吗?