2012-09-11 12 views
8

Ich bin Neuling zu mongodb.Mongodb Einfügen von doc ohne _id Feld

  1. Ich brauche ein Dokument ohne das _id Feld automatisch zu erzeugen.

  2. Ich muss das Feld Tenant_id als eindeutig festlegen oder muss das Feld "_id" zu Tenant_id ändern.

wie geht das?

so etwas wie dieses

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

Antwort

22

Standardmäßig werden alle regulären Sammlungen automatisch ein _id Feld einfügen, wenn es fehlt.

Dieses Verhalten kann jedoch geändert werden, wenn Sie die Sammlung erstellen, indem Sie den Parameter autoIndexId explizit auf false setzen.

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

Dann können Sie Dokumente ohne _id Feld einfügen. Aber einige Treiber, wie das Javascript (und so die Mongo-Konsole), fügen das Feld _id selbst hinzu. In der Mongo-Konsole können Sie dies tun:

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

Weitere Informationen über das autoIndexId Feld kann in der MongoDB documentation finden. Diese Seite behandelt Capped Collections, das Feld autoIndexId ist jedoch sowohl für reguläre als auch für capped Collections verfügbar.

+0

seine Arbeit nicht ... –

+2

Es ist nicht länger erlaubt - _id Feld ist für die Replikation erforderlich und sollte daher immer vorhanden sein. –

3

Das _id Feld ist der Standardschlüssel für ein Mongo Dokument, wenn Sie mit einer Kappe bedeckt Sammlungen verwenden.

Es ist ein umschaltbares Feld, das nicht aus einer Dokumentstruktur herausgelassen werden kann.

Ich würde stattdessen tennant_id als _id empfehlen.

2

Jedes MongoDB-Dokument muss ein eindeutiges Feld "_id" haben, und wenn Sie es nicht angeben, wird es automatisch für Sie generiert.

Es ist nicht möglich, dieses Feld umzubenennen.

Ihre zwei Möglichkeiten:

1) das erzeugte _id Feld ignorieren und eigenes tenant_id Feld verwenden (Sie müssen einen eindeutigen Index für das Feld) oder 2) zu speichern tenant_id Wert im _id hinzufügen Feld (und nutzen Sie die Tatsache, dass es bereits einen eindeutigen Index hat).

3

Mongodb generiert das Feld '_id' nur dann automatisch, wenn Sie beim Einfügen eines Dokuments keinen Wert für das Feld '_id' angeben. So können Sie nur manuell an die _id wenn Sie das Dokument einfügen:

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

Es gibt keine Möglichkeit, _id Feld in Mongong Sammlungen zu entfernen. Wie sagte @stephene, ich das gleiche versucht, aber iam immer Fehler wie diese

> 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