Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / NoSQL, Big Data Новый топик    Ответить
 MongoDB недопостить повторений  [new]
Areostar
Member

Откуда:
Сообщений: 3397
Возник вопрос.

Предположим мне надо сохранять данные с уникальным полем.

Кпримеру катировки валют. нужно сохранить только одну запись для каждой даты.
но как я могу запретить добавление второй записи для одной и тойже даты??
2 авг 19, 15:35    [21940789]     Ответить | Цитировать Сообщить модератору
 Re: MongoDB недопостить повторений  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2027
Areostar,

создать по полю даты уникальный индекс
3 авг 19, 10:33    [21941105]     Ответить | Цитировать Сообщить модератору
 Re: MongoDB недопостить повторений  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2027
И сохранять через update c опцией: { upsert: true }
3 авг 19, 10:36    [21941106]     Ответить | Цитировать Сообщить модератору
 Re: MongoDB недопостить повторений  [new]
Areostar
Member

Откуда:
Сообщений: 3397
Ссылку на пример можно? Если вас не затруднит
6 авг 19, 14:04    [21942949]     Ответить | Цитировать Сообщить модератору
 Re: MongoDB недопостить повторений  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2027
Примеры есть в документации:

https://docs.mongodb.com/manual/core/index-unique/
https://docs.mongodb.com/manual/reference/method/db.collection.update/

к примеру Европейский Центральный Банк выдаёт информацию о курсах валют в ледующем виде:
  {
    base: "EUR",
    date: "2018-04-08",
    rates: {
      "CAD": 1.565,
      "CHF": 1.1798,
      "GBP": 0.87295,
      "SEK": 10.2983,
      "EUR": 1.092,
      "USD": 1.2234,
      ...
    }
  }

следовательно будет такой индекс:
db.exchangerates.createIndex({ base: 1, date: 1 }, { unique: true })

и такой апдейт:
db.exchangerates.update(
  { base: "EUR", date: "2019-08-06" },
  {
    base: "EUR",
    date: "2019-08-06",
    rates: {
      "CAD": 1.4785,
      "HKD": 8.767,
      "ISK": 136.5,
      "PHP": 58.269,
      "DKK": 7.4644,
      "HUF": 325.35,
      ...
    }
  },
  { upsert: true }
)
7 авг 19, 09:14    [21943456]     Ответить | Цитировать Сообщить модератору
Все форумы / NoSQL, Big Data Ответить