MongoDB插入没有_id字段的文档

18

我是 MongoDB 的新手。

  1. 我需要插入一个文档,但不希望自动生成 _id 字段。

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

该怎么做呢?

类似于这样:

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

我也在想关于 _class 字段的事情。 - djangofan
6个回答

29

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

自 MongoDB v4.0 起,无法不拥有 _id 字段

对于 MongoDB 版本 v4.0 及以下版本:

但是,在创建集合时,可以通过将 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。


8
不再允许 - 复制所需的_id字段必须存在,因此应始终存在。 - Asya Kamsky

4

_id字段是mongo文档的默认键,除非您使用的是capped集合。

这是一个不可变的字段,不能在文档结构中省略。

我建议改用tennant_id作为_id


3

如果在插入文档时没有为'_id'字段指定值,Mongodb将自动生成'_id'字段。因此,您可以在插入文档时手动设置_id:

db.tenants.insert( {"_id" : 123, "Tenant_info" : ... } )

2
每个 MongoDB 文档都必须有一个唯一的 "_id" 字段,如果您没有提供,则将自动生成该字段。
无法更改此字段的名称。
您有两个选择:
1)忽略生成的 _id 字段并使用自己的 tenant_id 字段(需要在该字段上添加唯一索引)

2)将 tenant_id 值存储在 _id 字段中(并利用其已经具有唯一索引的优势)。

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接