Node.js MongoDB Upsert update

mongodb, node.js, upsert

Solution

Your general approach is right, but as the error message suggests, you've got a syntax problem in your code.

Try this instead:

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

When an upsert needs to create a new object it combines the fields from the selector (first parameter) and the update object (second parameter) when creating the object so you don't need to include the `keyword` field in both.

Note that `update()` is deprecated in the 2.0 driver, so you should now use either `updateOne()` or `updateMany()`.

Problem

I'm writing a little application which scores keywords. So if "beirut" and "education" get entered in, if they haven't been seen before, I want to create a mongo entry, and give them a score of 1. If they have, I want to increment their score by one. I'm trying to do this with one update command, but I think I might be doing it wrong. - Ranking is the object representing the database - "key" is the keyword ``` 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 {` Can you not create a brand new document with an increment?

Original source