MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Créer _id sur les sous-documents sur mongoimport --jsonArray

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.