设置自己的猫鼬模式 _id 属性

Posted

技术标签:

【中文标题】设置自己的猫鼬模式 _id 属性【英文标题】:Setting own mongoose schema _id property 【发布时间】:2017-01-08 09:58:08 【问题描述】:

我发现了一些示例,展示了将您自己的 _id 属性设置为 mongoose 架构中默认 ObjectId 以外的其他内容的能力:

var personSchema = new mongoose.Schema(
    _id: Number,
    name: String
);

我有几个问题:

1) 这会自动递增并为我处理其他所有事情吗?我见过的唯一示例没有显示任何额外的代码来确保这是 MongoDB 中唯一且递增的键。

2) 这似乎对我不起作用。当我从架构中删除 _id 时,我会按预期正确发布文档,但是当我添加它 (_id: Number) 时,没有任何内容添加到集合中,并且 Postman 只返回一个空对象 。以下是相关代码:

var personSchema = new mongoose.Schema(
    _id: Number,
    name: String
);

var Person = mongoose.model("Person", personSchema);

app.get("/person", function (req, res) 
    Person.find(function (err, people) 
        if (err) 
            res.send(err);
         else 
            res.send(people)
        
    );
);

app.post("/person", function(req, res) 
    var newPerson = new Person(req.body);

    newPerson.save(function(err) 
        if (err) 
            res.send(err);
         else 
            res.send(newPerson);
        
    );
);

POST 请求返回,既不创建集合也不创建文档。

【问题讨论】:

【参考方案1】:

如果您在架构定义中包含_id 字段,则在插入文档时,您必须为其提供您自己手动生成的_id。否则,文档将不会被插入。

或者,如果您没有在架构定义中包含 _id 字段,Mongoose 会在插入文档时自动为您创建此字段,其类型为 ObjectId(这是默认的MongoDB 在文档上设置_id 字段)。

【讨论】:

这是有道理的。现在我只需要查找一些最佳实践来创建您自己的 id 属性并保持正确的增量等......

以上是关于设置自己的猫鼬模式 _id 属性的主要内容,如果未能解决你的问题,请参考以下文章

来自不同集合的子文档 ID 数组的猫鼬模式

来自不同集合的子文档 ID 数组的猫鼬模式

如何使用外键数组在没有 _id 的猫鼬中填充?

嵌套模式/子文档对象中的猫鼬 findById() - 聚合

带有数组的猫鼬模式

带有数组的猫鼬模式