我是mongodb的新手。
我需要插入一个没有自动生成_id字段的文档。
我需要将字段Tenant_id设置为唯一,或者需要更改" _id"字段到Tenant_id。
怎么做?
类似这样的事情
Tenant
{Tenant_id: 123, Tenant_info: ...}
答案 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