【发布时间】:2021-04-02 05:39:19
【问题描述】:
我有一个需要“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是一个virtual getter,它返回String的_id值。这会自动发生,除非您为该架构/模型指定id选项为false,因为它的值已经是_id的值,就像String一样。您尝试如何/在哪里访问id?如果您的意思是从 API 响应中看不到 JSON 格式的id,则需要确保启用了 virtuals 并指定在toJSON中返回它们。 -
这只是真实案例的简化模型。我需要文档中的“id”和“_id”属性,因为应用程序的其余部分正在寻找“id”属性。因此,我需要在创建文档后将“id”属性设置为等于“_id”。我目前的方法有效,但我只是想检查一下,我可以用更简单的方式来做。
-
文档保存后,您可以立即访问
id,无需设置,猫鼬会自动设置。它实际上只是一个返回String(_id)的虚拟属性。如果您在应用程序中设置断点并检查文档,您将看到它有类似get() id的内容。您是否尝试过访问document.id?请记住,我的意思是它可以在实际文档中使用,除非您相应地指定toJSON和toObject,否则它不会是 JSON。 -
我设法用虚拟财产解决了这个问题。谢谢。
标签: javascript mongodb mongoose mongoose-schema