У меня есть документ в MongoDB, который содержит некоторую метаинформацию, такую как дата обновления и _id, и массив адресов.
{
"_id": {
"$oid": "4e73a30466ca1a1f56000001"
},
"updated": 1316215062,
"address": [
{
"street": "Rotenturmstrasse 8",
"postcode": "1020",
"phone": "Vienna",
"altitude": -1,
"geolocation": [
"11.367464",
"47.204876"
]
}
]
}
Теперь может быть несколько адресов. Я создаю объект для адреса, который необходимо обновить, и сохраняю его в базе данных. Вот как выглядит новый объект для вставки:
new_object = {
:_id=>BSON::ObjectId('4e73a30466ca1a1f56000001'),
:updated=>1316215099,
:address=>[
nil,
nil,
{
:street=>"Reumannplatz 8",
:postcode=>"1020",
:phone=>"Vienna",
:altitude=>-1,
:geolocation=>[
"12.367464",
"48.204876"
]
}
]
}
После вызова db.venues.save(new_object)
я бы хотел, чтобы документ выглядел так:
{
:_id=>BSON::ObjectId('4e73a30466ca1a1f56000001'),
:updated=>1316215099,
:address=>[ {
"street": "Rotenturmstrasse 8",
"postcode": "1020",
"phone": "Vienna",
"altitude": -1,
"geolocation": [
"11.367464",
"47.204876"
]
},
nil,
{
:street=>"Reumannplatz 8",
:postcode=>"1020",
:phone=>"Vienna",
:altitude=>-1,
:geolocation=>[
"12.367464",
"48.204876"
]
}
]
}
Вместо этого он перезаписывает весь массив и в итоге выглядит так:
{
:_id=>BSON::ObjectId('4e73a30466ca1a1f56000001'),
:updated=>1316215099,
:address=>[
nil,
nil,
{
:street=>"Reumannplatz 8",
:postcode=>"1020",
:phone=>"Vienna",
:altitude=>-1,
:geolocation=>[
"12.367464",
"48.204876"
]
}
]
}
Какой способ это сделать? Я пытаюсь избежать нескольких запросов. Было бы проще, если бы вместо этого массив адресов в базе данных был хешем?