Nein.
Um keine ObjectId zu generieren, aber Sie können eine ObjectId in JSON mit der folgenden Notation einfügen:
{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }
Dies würde ein Feld namens test
erstellen mit dem Wert ObjectId("5519e8ac996ef7f4636bfaec")
. Der Wert des Schlüssels $oid
muss eine gültige ObjectId sein.
Ja, das brauchen Sie, um die ObjectId-Werte zu generieren. Sie könnten entweder ein kleines Skript schreiben, z. B. mit dem Python-Treiber, um den Import durchzuführen und ObjectIds als Teil davon zu generieren, oder mongoimport verwenden und dann die Sammlung scannen und jedes Unterdokument mit einer ObjectId aktualisieren:
> db.test.find()
{ "_id" : ObjectId("5519e8ac996ef7f4636bfaec"), "a" : [ { "x" : 1 }, { "y" : 2 } ] }
> db.test.find().forEach(function(doc) {
for (var i = 0; i < doc.a.length; i++) {
doc.a[i]._id = ObjectId()
}
db.test.update({ "_id" : doc._id }, doc)
} )
Beachten Sie dies, es sei denn, es gibt einen bestimmten Grund, eine _id/ObjectId in einem Unterdokument zu haben, wie die _id
ein Verweis auf ein anderes Dokument ist, ist es weder notwendig noch wünschenswert, jedem Unterdokument eine ObjectId zuzuweisen.