Mongoose 默认设置文档的 "id" 属性 等于文档的“_id”
Mongoose set "id" property of document to be equal to "_id" of the document by default
我有一个模型需要有“id”属性。由于它需要是唯一的,所以我想在创建后将其值设置为与文档的“_id”属性 相同。所以,我的模型看起来像这样:
const modelSchema = new Schema(
{
id: { type: String, unique: true },
property_1: { type: String, unique: false }
property_2: { type: String, unique: false }
...
}
);
目前,我使用 2 个不同的查询来执行此操作,一个用于创建文档,一个用于在创建文档后用“_id”的值更新“id”属性。
Model.create({
propery_1: value_1,
propery_2: value_2,
...
}).then((document) => {
document.id = document._id;
document.save();
})
有没有办法定义我的架构以默认支持此功能(“id”属性 将自动设置为“_id”的值)。或者我可以用具有相同功能的查询替换这两个查询吗?
我通过从架构中删除“id”字段并定义虚拟 属性“id”来解决它。这样 Mongoose 会自动将字段“id”添加到文档中。代码如下所示:
const modelSchema = new Schema(
{
property_1: { type: String, unique: false }
property_2: { type: String, unique: false }
...
}, {
toJSON: { virtuals: true },
toObject: { virtuals: true }
}
);
modelSchema.virtual('id', {
id: this.id
});
添加 toJSON: { virtuals: true }
和 toObject: { virtuals: true }
很重要,这样虚拟字段将默认添加到文档中。
我有一个模型需要有“id”属性。由于它需要是唯一的,所以我想在创建后将其值设置为与文档的“_id”属性 相同。所以,我的模型看起来像这样:
const modelSchema = new Schema(
{
id: { type: String, unique: true },
property_1: { type: String, unique: false }
property_2: { type: String, unique: false }
...
}
);
目前,我使用 2 个不同的查询来执行此操作,一个用于创建文档,一个用于在创建文档后用“_id”的值更新“id”属性。
Model.create({
propery_1: value_1,
propery_2: value_2,
...
}).then((document) => {
document.id = document._id;
document.save();
})
有没有办法定义我的架构以默认支持此功能(“id”属性 将自动设置为“_id”的值)。或者我可以用具有相同功能的查询替换这两个查询吗?
我通过从架构中删除“id”字段并定义虚拟 属性“id”来解决它。这样 Mongoose 会自动将字段“id”添加到文档中。代码如下所示:
const modelSchema = new Schema(
{
property_1: { type: String, unique: false }
property_2: { type: String, unique: false }
...
}, {
toJSON: { virtuals: true },
toObject: { virtuals: true }
}
);
modelSchema.virtual('id', {
id: this.id
});
添加 toJSON: { virtuals: true }
和 toObject: { virtuals: true }
很重要,这样虚拟字段将默认添加到文档中。