17

我是 mongodb 的新手。

  1. 我需要插入一个没有自动生成 _id 字段的文档。

  2. 我需要将字段 Tenant_id 设置为唯一或需要将“_id”字段更改为 Tenant_id。

怎么做?

像这样的东西

     Tenant
        {Tenant_id: 123, Tenant_info: ...}
4

5 回答 5

27

默认情况下,如果 _id 字段不存在,所有常规集合都会自动插入该字段。

但是,可以在创建集合时更改此行为,方法是将 autoIndexId 参数显式设置为 false。

> db.createCollection("noautoid", { autoIndexId: false })
{ "ok" : 1 }

然后您可以插入没有 _id 字段的文档。但是一些驱动程序,例如 javascript 驱动程序(以及 mongo 控制台),会自行添加 _id 字段。在 mongo 控制台中,您可以执行以下操作:

> db.noautoid._mongo.insert(db.noautoid._fullName, {name: "Jack"})
> db.noautoid.find()
{ "name" : "Jack" }

有关 autoIndexId 字段的更多信息可以在MongoDB 文档中找到。这个页面是关于 Capped Collections 的,但是 autoIndexId 字段对于常规和 capped collections 都是通用的。

于 2012-09-12T09:17:16.343 回答
4

除非您使用上限集合,否则该_id字段是 mongo 文档的默认键。

它是一个不可改变的字段,不能被排除在文档结构之外。

我建议改用tennant_idas _id

于 2012-09-11T21:59:04.800 回答
3

只有在插入文档时没有为“_id”字段指定值时,mongodb才会自动生成“_id”字段。因此,您可以在插入文档时手动设置 _id:

db.tenants.insert( {"_id" : 123, "Tenant_info" : ... } )
于 2012-09-11T21:59:48.797 回答
2

每个 MongoDB 文档都必须有一个唯一的字段“_id”,如果您不提供它,它将自动为您生成。

无法重命名此字段。

你的两个选择是:

1)忽略生成的_id字段并使用您自己的tenant_id字段(您需要在该字段上添加唯一索引)或2)将tenant_id值存储在_id字段中(并利用它已经具有唯一索引的事实在上面)。

于 2012-09-11T21:59:29.437 回答
1

无法删除任何 mongodb 集合中的 _id 字段。正如@stephene 所说,我尝试了同样的方法,但我遇到了这样的错误

> db.noautoid._mongo.insert(db.noautoid._fullName, {name: "Jack"});
 2015-06-18T11:22:29.149+0530 E QUERY    Error: insert needs 3 args
 at (shell):1:20
于 2015-06-18T06:47:41.153 回答