Nie.
Nie generować ObjectId, ale możesz dołączyć ObjectId do JSON z następującą notacją:
{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }
Spowoduje to utworzenie pola o nazwie test
o wartości ObjectId("5519e8ac996ef7f4636bfaec")
. Wartość klucza $oid
musi być prawidłowym identyfikatorem obiektu.
Tak, właśnie tego potrzebujesz, aby wygenerować wartości ObjectId. Możesz albo napisać mały skrypt, używając np. sterownika Pythona, aby wykonać import i wygenerować ObjectId jako jego część, lub użyć mongoimport, a następnie przeskanować kolekcję i zaktualizować każdy poddokument za pomocą 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)
} )
Zwróć uwagę, że o ile nie ma konkretnego powodu, aby mieć _id/ObjectId w poddokumencie, na przykład _id
jest odniesieniem do innego dokumentu, nie jest konieczne ani pożądane umieszczanie identyfikatora ObjectId na każdym poddokumencie.