sql >> Base de Datos >  >> NoSQL >> MongoDB

Crear _id en subdocumentos en mongoimport --jsonArray

No.

No para generar un ObjectId, pero puede incluir un ObjectId en el JSON con la siguiente notación:

{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }

Esto crearía un campo llamado test con valor ObjectId("5519e8ac996ef7f4636bfaec") . El valor de la clave $oid debe ser un ObjectId válido.

Sí, eso es lo que necesitará para generar los valores de ObjectId. Puede escribir un pequeño script usando, por ejemplo, el controlador de Python para realizar la importación y generar ObjectId como parte de él, o usar mongoimport y luego escanear la colección y actualizar cada subdocumento con 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)
} )

Tenga en cuenta que, a menos que haya alguna razón específica para tener un _id/ObjectId en un subdocumento, como el _id es una referencia a otro documento, no es necesario ni deseable poner un ObjectId en cada subdocumento.