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.