为啥MongoDB在插入自定义id值时将_id加一
Posted
技术标签:
【中文标题】为啥MongoDB在插入自定义id值时将_id加一【英文标题】:Why does MongoDB increase _id by one when inserting with custom id value为什么MongoDB在插入自定义id值时将_id加一 【发布时间】:2016-02-12 23:56:06 【问题描述】:在插入具有自定义 _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
【问题讨论】:
【参考方案1】:这是因为 "setDefaultsOnInsert : true" 。当您使用此选项时,您无法更新“_id”字段。它是由猫鼬设置的。 如果您想要自定义“_id”,请确保“setDefaultsOnInsert”选项为“false”。 这是猫鼬的问题之一。
【讨论】:
以上是关于为啥MongoDB在插入自定义id值时将_id加一的主要内容,如果未能解决你的问题,请参考以下文章
将我的 JSON 插入到集合中时,MongoDB 会覆盖我的自定义 id 属性吗?