いいえ。
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
のように、サブドキュメントに_id/ObjectIdを設定する特別な理由がない限り注意してください。 は別のドキュメントへの参照であるため、すべてのサブドキュメントにObjectIdを配置する必要も望ましくもありません。