MongoDB: Вставьте документ, если он не существует, но пропустите обновление, если он уже существует

#node.js #mongodb #mongoose

Вопрос:

Как вставить документ в мангуст, если он не существует, не обновляя существующий, если он уже существует? Я знаю, что если я делаю вставку, он пытается обновить, если существует, и вставляет новый документ, если он не существует. Однако моя ситуация такова, что я просто хочу вставить новый документ, если он не существует, и оставить существующий, не обновляя его.

Ответ №1:

Вы на правильном пути. Вы должны использовать все еще использовать upsert в update методе, но также и с $setOnInsert оператором. Пожалуйста, прочитайте об этом операторе здесь.

Короче говоря, использование этого оператора позволяет выполнять операцию только в том случае, если она приводит к вставке нового документа. В другом случае он просто пропустит.

И да, вы, конечно, можете использовать это с мангустом:

 YourModel.update(
  { queryField: 1 }, // query
  { $setOnInsert: { ...newDocument }}, // new doc fields
  { upsert: true } // still use upsert option
);