Non.
Ne pas générer d'ObjectId, mais vous pouvez inclure un ObjectId dans le JSON avec la notation suivante :
{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }
Cela créerait un champ appelé test
avec la valeur ObjectId("5519e8ac996ef7f4636bfaec")
. La valeur de la clé $oid
doit être un ObjectId valide.
Oui, c'est ce dont vous aurez besoin pour générer les valeurs ObjectId. Vous pouvez soit écrire un petit script en utilisant, par exemple, le pilote Python pour effectuer l'importation et générer des ObjectId dans le cadre de celui-ci, soit utiliser mongoimport puis analyser la collection et mettre à jour chaque sous-document avec un 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)
} )
Notez que, à moins qu'il y ait une raison spécifique d'avoir un _id/ObjectId sur un sous-document, comme le _id
est une référence à un autre document, il n'est ni nécessaire ni souhaitable de mettre un ObjectId sur chaque sous-document.