Mongodb在没有_id字段的情况下插入doc

时间:2012-09-11 21:40:22

标签: mongodb mongodb-java mongodb-query

我是mongodb的新手。

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

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

  3. 怎么做?

    类似这样的事情

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

5 个答案:

答案 0 :(得分:23)

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

但是,通过将autoIndexId参数明确设置为false,可以在创建集合时更改此行为。

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

然后您可以插入没有_id字段的文档。但是一些驱动程序,比如javascript one(以及mongo控制台),自己添加_id字段。在mongo控制台中,您可以这样做:

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

有关autoIndexId字段的更多信息,请参见MongoDB documentation。此页面是关于Capped Collections的,但autoIndexId字段对于常规和上限集合都是通用的。

答案 1 :(得分:3)

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

这是一个不可忽略的字段,不能遗漏在文档结构之外。

我建议改为使用tennant_id作为_id

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

无法重命名此字段。

您的两个选择是:

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

答案 4 :(得分: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