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

Setting own mongoose schema _id property

本文关键字:id 属性 模式 自己的 设置      更新时间:2023-09-26

我发现了一些例子,展示了在猫鼬模式中设置自己的_id属性为默认ObjectId以外的东西的能力:

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

我有几个问题:

1)这个自动增加和处理一切为我吗?我所见过的唯一示例没有显示任何额外的代码来确保这是MongoDB中唯一的和递增的键。

这似乎不适合我。当我从模式中删除_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请求返回{},集合和文档都不创建。

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

或者,如果您在模式定义中不包含_id字段,则在插入文档时,Mongoose将自动为您创建此字段,并且类型为ObjectId(这是MongoDB在文档上设置_id字段的默认方式)。