Nej.
Ikke for at generere et ObjectId, men du kan inkludere et ObjectId i JSON med følgende notation:
{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }
Dette ville skabe et felt kaldet test
med værdien ObjectId("5519e8ac996ef7f4636bfaec")
. Værdien af nøglen $oid
skal være et gyldigt ObjectId.
Ja, det er det, du skal bruge for at generere ObjectId-værdierne. Du kan enten skrive et lille script ved at bruge f.eks. Python-driveren til at importere og generere ObjectId'er som en del af det, eller bruge mongoimport og derefter scanne samlingen og opdatere hvert underdokument med et 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)
} )
Bemærk, at medmindre der er en specifik grund til at have et _id/ObjectId på et underdokument, såsom _id
er en reference til et andet dokument, er det hverken nødvendigt eller ønskeligt at sætte et ObjectId på hvert underdokument.