Nej.
Inte för att generera ett ObjectId, men du kan inkludera ett ObjectId i JSON med följande notation:
{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }
Detta skulle skapa ett fält som heter test
med värdet ObjectId("5519e8ac996ef7f4636bfaec")
. Värdet på nyckeln $oid
måste vara ett giltigt ObjectId.
Ja, det är vad du behöver för att generera ObjectId-värdena. Du kan antingen skriva ett litet skript med t.ex. Python-drivrutinen för att importera och generera ObjectId's som en del av det, eller använda mongoimport och sedan skanna samlingen och uppdatera varje underdokument med ett ObjectId:
> 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)
} )
Observera att om det inte finns någon specifik anledning att ha ett _id/ObjectId på ett underdokument, som _id
är en referens till ett annat dokument, är det varken nödvändigt eller önskvärt att sätta ett ObjectId på varje underdokument.