Задать вопрос

Как передать название поля в функцию обновлення данных mongoDB (mongoose)?

Имеется коллекция

{
    "email" : "test@test.com",
    "hash" : "$2a$10$XAEnbgWFsEAICSsI66jR9u2VMZhfLwp54n2CmR2xp5M1qJcGOe8ze",
    "salt" : "$2a$10$XAEnbgWFsEAICSsI66jR9u",
    "_id" : ObjectId("54b3892c4d165ad054b29477"),
    "name" : {
        "first" : "test",
        "last" : "test"
    },
    "__v" : 0
}

/* 1 */
{
    "__v" : 0,
    "_id" : ObjectId("54a143f4af6053f026119265"),
    "email" : "test1@test1.com",
    "hash" : "$2a$10$oj5Z54mYYOJQ8WcRUpsxwOIRA.XHsXjp5hsqq4PfTmLjnFpUC18qq",
    "name" : {
        "first" : "test1",
        "last" : "test1"
    },
    "salt" : "$2a$10$oj5Z54mYYOJQ8WcRUpsxwO"
}


Модель следующая:
var UserSchema = new Schema({

    // Name
    name : { 
        first: { type: String, required: true },
        last: { type: String, required: true }
    },
    group : {type : String, required: true},
    contactNum: {type: Number, required: false},
    email: { type: String, required: true, unique: true },
    salt: { type: String, required: true },
    hash: { type: String, required: true },
    visits: {
        lastVisit:  {type: Date, required:false},
        allVisits: {type: Date, required:false}
    },
    // Address
    address : {       
        address1: {type:String, required:false},
        town: {type:String, required:false},
        province: {type:String, required:false},
        country: {type:String, required:false},
        pcd: {type:String, required:false}
    },
    shoppingHistory: {
        product : {type:String, required:false},
        date : {type: Date, required:false}
    },
    bonusPoints : {type: Number, required:false},
    referalLink : {type: String, required:false}
  });


Пытаюсь написать функцию для обновления документа:

updateUser: function (userId, data, param) {
        User.update ({_id: userId}, {
            data : param}, function(err){
            if (err) {throw err;}
        });
    },


Запуск функции:

db.updateUser("54a143f4af6053f026119265", "bonusPoints", 40);


Проблема заключается в том, что параметр data не передается в функцию обновления (bonusPoints), вместо нее функция обновления пытается обновить поле data, которого не существует.
Как передать название поля при запуске функции?
  • Вопрос задан
  • 2662 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
dizballanze
@dizballanze
Software developer at Yandex
В литерал объекта нельзя передавать название атрибута в переменной.
Вот так будет работать:
updateUser: function (userId, data, param) {
        var key_value = {};
        key_value[data] = param;
        User.update ({_id: userId}, key_value, function(err){
            if (err) {throw err;}
        });
    },
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы