Node.js MongoDB Upsert update

Я пишу небольшое приложение, которое забивает ключевые слова. Поэтому, если "бейрут" и "образование" будут введены, если они не были замечены раньше, я хочу создать запись в манго и дать им оценку 1. Если они есть, я хочу увеличить их счет на один, Я пытаюсь сделать это с помощью одной команды обновления, но я думаю, что я ошибаюсь.

  • Ранжирование - это объект, представляющий базу данных
  • "ключ" - это ключевое слово
rankingdb.update(
    {keyword:key},
    {keyword:key, {$inc:{score:1}}},
    {upsert:true, safe:false},
    function(err, data) {
      if (err) {
          console.log(err);
      }
      else {
          console.log("score succeeded");
      }
    }
);

SyntaxError: Unexpected token {

Не можете ли вы создать совершенно новый документ с приращением?

Ответ 1

Ваш общий подход прав, но, как следует из сообщения об ошибке, у вас есть синтаксическая проблема в вашем коде.

Попробуйте это вместо:

rankingdb.update(
    {keyword: key},
    {$inc: {score: 1}},
    {upsert: true, safe: false},
    function(err,data){
        if (err){
            console.log(err);
        }else{
            console.log("score succeded");
        }
    }
);

Когда upsert необходимо создать новый объект, он объединяет поля из селектора (первый параметр) и объект обновления (второй параметр) при создании объекта, поэтому вам не нужно включать поле keyword в оба.

Обратите внимание, что update() устарело в драйвере 2.0, поэтому теперь вы должны использовать либо updateOne(), либо updateMany().