Events.update(data,data,{upsert: true});
Модели LoopBack не предоставляют API MongoDB.Такие методы, как create
, предоставляют независимый от базы данных API, который сопоставляется соединителями с командами базы данных.
Если вы хотите вставить документ только в том случае, если он не существует, вы можете использовать один из следующих методов (в зависимости отчто вы пытаетесь достичь):
replaceOrCreate
patchOrCreate
(также известный как upsert
и updateOrCreate
) findOrCreate
upsertWithWhere
if(Events.find({itemOfData: resultData.itemOfData},{limit: 1}).size < 1){
Метод find
принимает объект Filter (см. Запрос данных ), который содержит не только условие для сопоставления записей, но также такие вещи, как нумерация страниц и какие связанные модели включать.Условие хранится в свойстве where
объекта Filter.
Также метод find
возвращает Promise, вам нужно дождаться его разрешения, прежде чем подсчитать количество возвращенных записей.
const found = Events.find({
where: {itemOfData: resultData.itemOfData}
limit: 1
});
if (found.size < 1){
// ...
}
Хотя решение, основанное на find
, может показаться хорошо работающим в процессе разработки, оно вводит условие гонки, при котором две "одинаковые" записи могут создаваться, когда приложение находится под высокой нагрузкой.По возможности рекомендуется использовать встроенные функции, такие как patchOrCreate
, которые используют специфичные для базы данных средства для обеспечения атомарности.