我有一个 Mongoose 模式,我使用时间戳选项自动将
createdAt
和 updatedAt
字段添加到文档中。但是,我只想将时间戳应用于子文档,而不是主文档。
这是我的架构示例:
const feedSchema = new mongoose.Schema(
{
userId: {
type: String,
required: true,
},
feed: [
new mongoose.Schema(
{
// ... (subdocument fields)
},
{ _id: false, timestamps: true } }
),
],
},
{
_id: false,
timestamps: false,
versionKey: false,
}
);
问题是,即使我只为子文档模式设置了
timestamps: true
,Mongoose 仍然向主文档添加时间戳,即使我禁用了它们。
有没有办法将 Mongoose 配置为仅将时间戳应用于
feed
数组中的子文档而不应用于主文档?
解决此问题的最佳方法是 - 不要使用
Model.create()
创建文档,而是将 new Model()
与 doc.save()
结合使用。这将允许您在调用 {timestamps: false}
时传入 save()
选项。这是一个例子:
const feedSchema = new mongoose.Schema(
{
userId: {
type: String,
required: true,
},
feed: [
new mongoose.Schema(
{
// ... (subdocument fields)
},
{ _id: false, timestamps: true } }
),
],
},
{
_id: false,
timestamps: false,
versionKey: false,
}
);
const Feed = mongoose.model('Feed', feedSchema);
const newFeed = {
userId: '123',
feed: [
{
a: 'abc',
b: 'xyz'
}
]
};
const doc = new Feed(newFeed);
await doc.save({ timestamps: false });
这会将时间戳添加到文档中,但不会添加到父文档中。