Не.
Не за генериране на ObjectId, но можете да включите ObjectId в JSON със следната нотация:
{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }
Това ще създаде поле, наречено test
със стойност ObjectId("5519e8ac996ef7f4636bfaec")
. Стойността на ключа $oid
трябва да е валиден ObjectId.
Да, това е, което ще ви трябва, за да генерирате стойностите на ObjectId. Можете или да напишете малък скрипт, използвайки, например, драйвера на Python, за да извършите импортирането и да генерирате ObjectId като част от него, или да използвате mongoimport и след това да сканирате колекцията и да актуализирате всеки поддокумент с 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)
} )
Имайте предвид, че освен ако няма конкретна причина да имате _id/ObjectId в поддокумент, като _id
е препратка към друг документ, не е нито необходимо, нито желателно да се поставя ObjectId на всеки поддокумент.