为什么mongodb node.js驱动程序的insertOne方法会改变要插入的对象?

时间:2015-09-29 16:41:30

标签: javascript node.js mongodb

我正在学习mongodb节点,我正在使用以下代码

var assert = require('assert')
var url = 'mongodb://localhost:27017/learnyoumongo'
var client = require('mongodb').MongoClient

var doc = {
  firstName: 'Steve',
  lastName: 'Smith'
}
console.log(doc)  //logs as expected
client.connect(url, (err, db) => {
  assert.equal(err, null)
  var docs = db.collection('docs')
  docs.insertOne(doc, (err, result) => {
    assert.equal(err, null)
    console.log(doc)  //logs with an extra property i.e. _id
    db.close()
  })
})

我很惊讶地看到doc被mongo变异,看看检查两个console.log语句的输出。为什么doc对象发生了变异。

1 个答案:

答案 0 :(得分:1)

Mongo为每个未定义自身的文档添加了自动生成的_id。这是一种称为ObjectId的特殊对象类型,用作主键。您可以看到格式here的详细信息。

您可以通过将自己的_id添加到每个对象来绕过自动生成的_id,但是您需要能够保证它们是唯一的,就像您尝试使用相同的_id存储两个对象一样重复键错误。