2012-09-11 74 views
8

我是mongodb的新手。Mongodb插入doc沒有_id字段

  1. 我需要插入一個沒有自動生成_id字段的文檔。

  2. 我需要將字段Tenant_id設置爲唯一或需要將「_id」字段更改爲Tenant_id。

該怎麼辦?

像這樣

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

回答

22

默認情況下,所有的規則的集合,如果它不存在自動插入一個_id領域:所以當你插入文檔你可以手動設置_id。

但是,通過將autoIndexId參數明確設置爲false,可以在創建集合時更改此行爲。

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

然後你可以插入沒有_id字段的文件。但是一些驅動程序,如javascript之類(以及mongo控制檯),會自行添加_id字段。在蒙戈控制檯,你可以這樣做:

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

更多信息可以在MongoDB documentation找到。此頁面是關於Capped Collections的,但autoIndexId字段對於常規和加蓋的集合都是通用的。

+0

它不工作... –

+2

它不再被允許 - 複製需要_id字段,因此應始終存在。 –

3

_id場,除非您使用上限的集合爲一個蒙戈文檔的默認密鑰。

它是一個不能被排除在文檔結構之外的不可變字段。

我會推薦使用tennant_id作爲_id

2

每個MongoDB文檔都必須有一個唯一的字段「_id」,如果您沒有提供它,那麼它會自動爲您生成。

無法重命名此字段。

你兩個選擇是:

1)忽略生成的_id領域和使用自己的tenant_id場(你將需要在該字段中添加唯一索引) 或 2)商店tenant_id值在_id字段(並利用它已具有唯一索引的事實)。

3

只有在插入文檔時沒有爲'_id'字段指定值時,Mongodb會自動生成'_id'字段。

db.tenants.insert({"_id" : 123, "Tenant_info" : ... }) 
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