установить значения модели из json в nodejs - PullRequest
0 голосов
/ 04 июля 2018

Привет, ребята. Я хочу знать, как сохранить строку json в объект модели mongoose? позвольте мне объяснить упрощенную версию моей проблемы:

У меня есть модель схемы:

const mongo = require('mongoose');
const clientSchema = mongo.Schema({
    name: {type: String},
    age: {type: Number},
    updated_at: {type: Date},
}

и у меня есть метод пут, который показан ниже:

var Client = mongo.model('client', clientSchema);

//Update User
server.put(`/api/clients/:_id`, (req, res) =>
{
    Client.model.findById(req.params._id, (err, foundedclient) => 
    {
        if(err) res.send(err);

        //***********************************************************//
        /*I want to update foundedclient from req.body here!         */
        /*some function like : foundedclient.JsonTovalues(req.body); */  
        //***********************************************************//

        foundedclient.updated_at = new Date().toISOString();

        foundedclient.save((err) =>
        {
            res.send('saved successfully!');
        });
      });
});

req.body - это JSON:

{
    "name":"bardia",
    "age":27,
}

Я хочу обновить значение foundedclient с req.body в позиции, которую я выделил в коде знаками //*******//. Я хочу гипотетическую функцию, такую ​​как foundedclient.JsonTovalues(req.body). Каков наилучший способ достичь этого? Другими словами, как лучше всего сохранить json как значения режима?

Большое спасибо

1 Ответ

0 голосов
/ 04 июля 2018

вы можете определить метод экземпляра для чего-то похожего на updateByJson , как описано ниже

const clientSchema = mongo.Schema({
   name: {type: String},
   age: {type: Number},
   updated_at: {type: Date},
}

// here simply calling update method internally but exposed as an instance method 
clientSchema.methods.updateByJson = function(jsonToUpdate, cb){
   // will work if you are using mongoose old version 3.x
   this.constructor.update({_id: this._id}, {$set:jsonToUpdate}, cb);
   // should work with latest versions
   this.model('client').update({_id: this._id}, {$set:jsonToUpdate}, cb);
}

Ваш код клиента будет выглядеть так

var Client = mongo.model('client', clientSchema);

//Update User
server.put(`/api/clients/:_id`, (req, res) =>
{
    Client.model.findById(req.params._id, (err, foundedclient) => 
    {
        if(err) res.send(err);

        jsonToUpdate = req.body
        jsonToUpdate.updated_at = new Date().toISOString();

        foundedclient.updateByJson(jsonToUpdate, (err) => {
            res.send('saved successfully!');
        });
      });
});

Надеюсь, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...