2016-10-18 4 views
0

Я работаю с Node.js, и я использую соединитель Cloudant для источника данных loopback.updateAll loopback datasource не удаляет удаления внутри обновленных данных

Я определил модель под названием пользователя, как указано ниже:

var User = db.define('User', { 
    lastName: { type: String }, 
    firstName: { type: String }, 
    skills: [] 
}); 

У меня есть экземпляр этой модели, как:

{ 
    "lastName": "Doe", 
    "firstName": "John", 
    "skills": [ 
     { 
     "id": "0", 
     "text": "JAVA" 
     }, 
     { 
     "id": "1", 
     "text": "CSS" 
     }, 
     { 
     "id": "2", 
     "text": "HTML" 
     }, 
     { 
     "id": 3, 
     "text": "JAVASCRIPT" 
     }, 
     { 
     "id": 4, 
     "text": ".NET" 
     } 
    ], 
    "id": "d981b42c3a2a13da382102c76652b96e" 
    } 

Я хочу, чтобы обновить экземпляр, так что массив навыки только содержит эту информацию:

"skills": [ 
     { 
     "id": "0", 
     "text": "JAVAFX" 
     }, 
     { 
     "id": "1", 
     "text": "CSS3" 
     } 
    ] 

Я хочу использовать эту функцию:

app.post('/updateProfile', function(req, res) { 
    User.updateAll(
    {_id:req.body.id}, 
    {skills: req.body.skills}, 
    function(err,items){ 
    if(err){ 
     res.send(err); 
    } else { 
     res.sendStatus(200); 
    } 
    }); 
}); 

Однако проблема, с которой я сталкиваюсь, заключается в том, что обновляются только навыки с одинаковым идентификатором. Те, которые я хочу удалить (в примере это HTML, JAVASCRIPT и .NET), НЕ удаляются.

Как я могу фактически заменить навыки вместо того, чтобы делать обновление? Я пробовал другие вещи, описанные в документации, но это не работает. Documentation is available here

ответ

1

Подтверждено, что это ошибка в loopback-connector-cloudant. Поданный ошибка для него: https://github.com/strongloop/loopback-connector-cloudant/issues/44

Другое петлевой DataSource как «память» заменит весь skills объект, который работает отлично.

В качестве обходного пути существует метка User.replaceById(id, {data}, cb), которую вы можете использовать для замены всего свойства навыка. Патч еще под верифицировать, еще не выпущен, я буду обновлять здесь до тех пор, как она опубликована: https://github.com/strongloop/loopback-connector-cloudant/pull/34

Так что в вашем случае, это должно быть

User.replaceById('d981b42c3a2a13da382102c76652b96e', { "lastName": "Doe", "firstName": "John", "skills": [ { "id": "0", "text": "JAVAFX" }, { "id": "1", "text": "CSS3" } ] }, function(err, replacedInstance){ // get your replaced instance here })

Ограничением этого метод, вы должны включить неизмененные свойства также в свои данные обновления, например lastName, firstName.

+0

Я получаю следующее сообщение об ошибке: – JavascriptDeveloper

+0

essage :.. «Соединитель Cloudant не поддерживает replaceById операции Это не ошибка в LoopBack Пожалуйста, свяжитесь с авторами соединителя, предпочтительно с помощью вопросов GitHub – JavascriptDeveloper

+0

Спасибо за напоминание. me: Патч все еще находится под контролем, еще не выпущен, я буду обновлять его до тех пор, пока он будет опубликован: https://github.com/strongloop/loopback-connector-cloudant/pull/34 –