str*_*str 10 mongoose mongodb node.js mongoose-schema
我的应用程序使用Mongoose并具有使用timestamps选项的模式:
var fooSchema = new Schema({
name: String,
}, {
timestamps: true,
});
mongoose.model('Foo', fooSchema);
Run Code Online (Sandbox Code Playgroud)
因此,只要将更新写入集合,该updatedAt属性就会更改为当前日期.但是现在我想添加一些不应该更新updatedAt属性的更改.Stackoverflow(示例)上的一些答案建议使用Foo.collection,因为据称访问本机MongoDB驱动程序.所以我尝试了这个:
Foo.collection.update({ _id: someFooId }, { $set: { name: 'New Name' } });
Run Code Online (Sandbox Code Playgroud)
然而,这也改变了updatedAt财产.
那么如何在不更改的情况下更新文档updatedAt?
jok*_*007 12
从 mongoose 5 开始,可以在 Model.updateOne() 和 model.update() 中传递时间戳选项来跳过此更新的时间戳。
\n直接来自文档:
\n\n\n[options.timestamps=null] \xc2\xabBoolean\xc2\xbb 如果设置为 false 并启用架构级时间戳,则跳过此更新的时间戳。请注意,这允许您覆盖时间戳。如果未设置模式级时间戳,则不执行任何操作。
\n
例如问题中给出的,可以像这样跳过时间戳更新,
\nFoo.updateOne({ __id: someFooId },{ $set: { name: updatedName } }, { timestamps: false });\nRun Code Online (Sandbox Code Playgroud)\n
我刚刚找到了解决方案,它对我来说非常合适.
mongoose.connection.db.collection('player').update(
{_id: mongoose.Types.ObjectId('56cb91bdc5946f14678934ba')},
{$set: {name: 'Test'}}
});
Run Code Online (Sandbox Code Playgroud)
此查询不会更新该updatedAt字段.希望你还需要这个!
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |