Обходной путь дублирования имени в C # mongodb - PullRequest
1 голос
/ 22 января 2012

У меня есть следующий документ.

{
   name: 'XYZ',
   SubscriptionPeriods" : [{
      "_id" : null,
      "PeriodCode" : "1M",
      "Fee" : "100"
    }, {
      "_id" : null,
      "PeriodCode" : "3M",
      "Fee" : "300"
    }]
}

Администратор может обновлять периоды подписки; он может удалить существующие периоды и / или добавить новые периоды в том же обновлении. Сначала я думал, что смогу добиться этого, выполнив PullAll (...) и PushAll (...) для элемента SubscriptionPeriods в одном обновлении (...). Но оказалось, что mongodb не принимает поле дважды в обновлении (...). Я мог бы сделать PullAll (...) и PushAll (...) в 2 разных обновлениях (...). Но я не использовал этот подход, потому что если кто-то попытается прочитать SubscriptionPeriods между PullAll () и PushAll (), он получит пустой SubscriptionPeriods, и это не приемлемо. Итак, я придумал это; Я создал другой элемент с именем SubscriptionPeriods1 в одном обновлении и переименовал его в SubscriptionPeriod в другом обновлении. Похоже, что работает хорошо. Но мне интересно, если я что-то упускаю здесь! Я ценю любые комментарии, которые гуру MongoDB может иметь для меня!

1 Ответ

0 голосов
/ 22 января 2012

Да, это правда, драйвер не принимает две операции на одном поле.Но есть гораздо более простое решение для вашего случая.

Update.PullAll("name", ..).PushAll("name", ..) равно Set("name", bsonArray)

Поэтому вам нужно просто установить новый массив вместо старого.

...