教育用の埋め込みドキュメントを作成する webapp があります。ジョブ ドキュメントは次のようになります。
"educations" : [
{
"school" : "Brandywine High School",
"major" : "Testingasdf",
"grad_year" : ISODate("1979-01-01T00:00:00Z"),
"school_type" : "Graduate",
"_id" : ObjectId("4fb26c9ce5be08208b000ce4")
}
],
"email" : "user@domain.com",
教育ハッシュには、ジョブの詳細が含まれています。IDなしでハッシュを作成すると、次のことに気付きました。
User.collection.update(
{ _id: @user.id },
{ :$push => { educations: education } },
{ safe: true }
)
Rails コンソールから教育を照会すると、ID は毎回変わります。
irb(main):004:0> User.brandon.educations.map(&:id)
=> [BSON::ObjectId('4fb26e13e5be082384000007')]
irb(main):005:0> User.brandon.educations.map(&:id)
=> [BSON::ObjectId('4fb26e13e5be082384000009')]
ただし、これを行うと:
User.collection.update(
{ _id: @user.id },
{ :$push => { educations: BSON::ObjectId.create_pk(education) } },
{ safe: true }
)
ID は、コンソールから照会するたびに同じです。このため、埋め込みドキュメントをブラウザで編集するための教育を参照するのに苦労しています。
埋め込みドキュメントを作成するときは、常に BSON ID を指定する必要がありますか?