Вставить документы в коллекцию, если они уже не вставлены? - PullRequest
0 голосов
/ 10 ноября 2018

Я получаю список объектов из API:

let sold = [
 {  objId: 3240747,
    soldDate: '2018-09-27',
    soldPrice: 4610000,
    apartmentNumber: '1202',
    soldPriceSource: 'bid',
  },
  { objId: 3234263,
    soldDate: '2018-09-24',
    soldPrice: 2580000,
    soldPriceSource: 'bid',
  }
...
]

Я храню их в коллекции:

soldCollection.insertMany(sold)

Некоторые из объектов были получены ранее, и я хочу сохранить только один раз, которого еще нет в базе данных.

 dbo.collection("sold").createIndex({ "objId": 1 }, { unique: true })

Какой эффективный способ сделать это? Стоит ли запрашивать каждый объект перед его сохранением или есть способ справиться с этим?

1 Ответ

0 голосов
/ 10 ноября 2018

По умолчанию insertMany прекратит вставку при появлении первой ошибки (E11000 duplicate key error в этом случае). Вы можете изменить это поведение, указав для параметра ordered значение false. В этом случае вы получите список ошибок от неудачных вставок, однако все действительные документы будут вставлены успешно:

db.sold.insertMany(sold, { ordered: false })

пример документов здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...