В настоящее время у меня есть следующий набор данных:
{
'component_id':1,
'_locales':[
{
'url': 'dutch',
'locale': 'nl_NL'
}
] (etc)
}
Если я хочу обновить строку с помощью локали, я бы запускал нечто похожее на:
db.components.update(
{'component_id': 1, '_locales.locale': 'nl_NL'},
{$set: {'_locales.$': {'url': 'new url','locale':'nl_NL'}},
true
);
Это работает отлично, пока локаль не существует:
db.components.update(
{'component_id': 1, '_locales.locale': 'en_US'},
{$set: {'_locales.$': {'url': 'new url','locale':'en_US'}},
true
);
поскольку на компоненте_id есть уникальный индекс, это вызовет исключение, которое будет жаловаться на дублирующий ключ.
Есть ли способ автоматически добавить новый "документ" в другую локаль и обновить его, если он уже существует? Согласно документации с использованием оператора позиции не будет работать с "upserting".