【问题标题】:MongoDB Collection Insert Adds _id FieldMongoDB 集合插入添加 _id 字段
【发布时间】:2016-06-21 20:34:28
【问题描述】:

连接数据库、创建集合和编写文档的简单代码。但是,为什么调用collection.insert会改变jsonobj呢?

var mongo = require('mongodb').MongoClient;

mongo.connect('mongodb://localhost:27017/testDB', function(err, connection) {
  if (!err) {
    connection.createCollection('test', function (err, collection) {
      if (!err) {
        var jsonobj = {foo: 'bar', abc: 'xyz'};
        collection.insert(jsonobj, function (err, result) {
          if (!err) {
            //is not equal to the previous value of jsonobj
            console.log(jsonobj); 
          }
        });
      }
    });
  }
});

我得到的输出是{ foo: 'bar', abc: 'xyz', _id: 5769a38cd01e25512a3dbdd8 },不等于jsonobj的原始值。我知道 MongoDB 文档都有一个_id 字段,但为什么要添加到我的对象中?

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    发件人:https://docs.mongodb.com/manual/reference/glossary/

    _id

    每个 MongoDB 文档中都需要一个字段。 _id 字段必须具有唯一值。您可以将 _id 字段视为文档的 首要的关键。如果您创建一个没有 _id 字段的新文档, MongoDB 自动创建字段并分配唯一的 BSON 对象 ID。

    您的对象是文档,因此 Mongo 添加了它。

    【讨论】:

    • 为什么修改对象会有用?
    • 它唯一地标识了文档,因此即使您有两个具有完全相同字段的文档,它们也可以被区分。
    • 我的意思是,在什么用例中开发人员会发现修改他的对象很有用?
    • 据我所知,这是 Mongo 对您的文档所做的唯一修改。它对开发人员很有用,因为它是您可以存储、更新和查询的唯一值。例如,如果您要列出联系信息(假设一个联系人有 40 个字段),但您只想显示名字和姓氏。您可以放下整个对象,获取并存储它以跟踪用户选择了哪个 John Doe。您也可以只使用保证的唯一对象 ID 并发送这三个字段(第一个、最后一个和 _id)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    相关资源
    最近更新 更多