简体   繁体   中英

how to update a Mongo.db collection in meteor.js?

I have a collection that I need to update when the user presses a button. I just need to change one variable to another.

In the console, this line of code works:

  db.users.update({username : "Jack"},{age : 13, username : "Jack"});

But when I put in this code:

Template.body.events({
'click #updateAge' = function() {
         {
              alert();
              db.users.update({username : "Jack"},{age : 13, username : "Jack"});
         }
    }

})

into my JavaScript file for Meteor.js, it doesn't do anything at all (I don't get an error message, and I see the alert, but the update just doesn't work).

I've read through the Meteor Documentation on updating, but I just can't seem to get it to work. Does anybody know what I'm doing wrong here?

Found the problem.

Since I defined my database in my lib.js file

users = new Meteor.collection("users");

I don't need to put a db in front of the db.users.update({_id : "Jack"},{...}) . I also need to find the document using the given mongo _id , not the identifier "username" .

so the appropriate code would be

users.update({_id : "Jack"},{$set:{age : 13, username : "Jack"}});

In mongodb, you will have to use an update operator(for ex: $set ). Otherwise, your document will overwritten by the update object you are passing( I am not sure that's what you want ). I think, its works same in meteor. So, you will have to do something like this:

Meteor.users.update({username : "Jack"},{$set: {age : 13}});

This might not be the problem as you've stated you do not get a error message but to be sure: have you already allowed the user to update documents in the user collection?

Something like:

(in collections/permissions.js)

user.allow({
update: function (userId) {
    // the user must be logged in to allow updates
    return (userId != null);
}

})

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