简体   繁体   中英

Update Array from Document (MongoDB) in Javascript not Working

I've looking for an answer for like 5 five hours straight, hope somebody can help. I have a MongoDb collection results (I'm using mLab) which looks like this:

    {
    "user":"5818be9c74aaec1824c28626"
    "results":[{
             "game_id":14578,
             "level1":-1,
             "level2":-1,
             "level3":-1
         }, 
     { ....
     }],
         { "user":....
         }
     }

"user" is a MongoID I save in a previous part of the code, "results" is a record of scores. When an user does a new score, I have to update the score of the corresponding level (I'm using NodeJS). This is one of the things I've tried so far.

 app.get('/levelCompleted/:id/:time', function (request, response) {
 var id = request.params.id;
 var time = parseInt(request.params.time);
 var u= game.getUserById(id);
 var k = "results.$.level"+(u.level);
 //I build the key to update dinamycally
 dbM.collection("results").update(
    {user:id,
    "results.game_id":u.game_id
    //u has its own game_id
    },
    {$set: {k:time}}
);
...
response.send(...);

});

I've checked the content of every variable and parameter, tried also using $elemMatch and dot notation, set upsert and multi, with no results. I've used an identical command on mongo shell and it has work on the first try.

Update with Mongo Shell

If someone could tell me what I'm doing wrong or point me in the right direction, it would be great. Thanks

When you use a MongoId as a field in a MongoDB, you can't just pass a string with the id to do the query, you have to identify that string as an ObjectId (Id type in Mongo). Just add a new require in your node.js file.

var ObjectID = require("mongodb").ObjectID;

And use the imported constructor in your update request.

dbM.collection("results").update(
    {user:ObjectID(id),...
    ...
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM