MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Crie _id em subdocumentos em mongoimport --jsonArray


Não.

Não para gerar um ObjectId, mas você pode incluir um ObjectId no JSON com a seguinte notação:
{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }

Isso criaria um campo chamado test com valor ObjectId("5519e8ac996ef7f4636bfaec") . O valor da chave $oid precisa ser um ObjectId válido.

Sim, é isso que você precisará para gerar os valores de ObjectId. Você pode escrever um pequeno script usando, por exemplo, o driver Python para fazer a importação e gerar ObjectId's como parte dele, ou usar mongoimport e então escanear a coleção e atualizar cada subdocumento com um 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)
} )

Observe que, a menos que haja algum motivo específico para ter um _id/ObjectId em um subdocumento, como o _id é uma referência a outro documento, não é necessário nem desejável colocar um ObjectId em cada subdocumento.