为什么MongoDB在使用自定义id值插入时将_id增加1

为什么MongoDB在使用自定义id值插入时将_id增加1,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,在插入具有自定义id值的新文档时,我遇到了一些奇怪的问题。如果我插入一个自定义id为1020716632230383的文档,它将作为1020716632230384保存在数据库中。由于某种原因,它增加了1 这可能是什么原因造成的 我的问题是: exports.register = function(req, res){ console.log('ATTEMPT to register a user with id: ' + req.body.userInfo.id); // prints 1

在插入具有自定义id值的新文档时,我遇到了一些奇怪的问题。如果我插入一个自定义id为1020716632230383的文档,它将作为1020716632230384保存在数据库中。由于某种原因,它增加了1

这可能是什么原因造成的

我的问题是:

exports.register = function(req, res){
console.log('ATTEMPT to register a user with id: ' + req.body.userInfo.id);  
// prints 1020716632230383 !!!

var query = {'_id': req.body.userInfo.id};

var update = {
    '_id': req.body.userInfo.id ,  
    'name': req.body.userInfo.name 
};

var options = {
    upsert: true,   
    setDefaultsOnInsert : true
};

User.findOneAndUpdate(query, update, options).exec(function(err ,doc){
    if(!err){
        console.log('REGISTERED!: ' , doc);
        res.status(200).json({'success': true, 'doc': doc});
    }else{
        console.log(err);
        res.status(200).json({'success': false});
    }

});
};
在我的模式中_id被定义为一个数字

_id: {type:Number}
这是因为“setDefaultsOnInsert:true”。使用此选项时,无法更新“\u id”字段。这是猫鼬设置的。 如果想要自定义“\u id”,请确保“setDefaultsOnInsert”选项为“false”。 这是猫鼬的问题之一