2016-09-18 4 views
0

Я хочу обновить значение поддокумента, где сообщение имеет определенный идентификатор, а идентификатор пользователя - в массиве получателей. Я хочу обновить значение совпадающего объекта с указанным идентификатором пользователя.FeathersJS Mongoose: обновление совпадающего поддоку не работает

Когда я запускаю следующий запрос на MongoDB CLI, все работает и значение обновляется:

db.getCollection('messages').update({ 
    _id : ObjectId("57d7edb8c497a75a6a7fde60"), 
    "recipients.userId" : "5789127ae2bcc79326462dbc" 
},{ 
    $set : {"recipients.$.read": true} 
}); 

Но когда я запускаю следующий запрос с помощью JS в моем приложении FeathersJS:

messageService.update({ 
    _id : '57d7edb8c497a75a6a7fde60', 
    "recipients.userId" : "5789127ae2bcc79326462dbc" 
},{ 
    $set: {"recipients.$.read": true} 
}).then(function(e) { 
    console.log(e) 
}).catch(function(e) { 
    console.log(e); 
}); 

я получаю ошибку:

GeneralError: The positional operator did not find the match needed from the query. Unexpanded update: recipients.$.read

Что я делаю неправильно?

И есть ли лучший способ обновить сразу несколько сообщений?

Спасибо!

ответ

1

Для обновления одного или нескольких записей в запросе, Вы должны вызвать service method, установив id в null и ввод запроса в params.query:

messageService.update(null, { 
    $set: {"recipients.$.read": true} 
}, { 
    query: { 
    _id : '57d7edb8c497a75a6a7fde60', 
    "recipients.userId" : "5789127ae2bcc79326462dbc" 
    } 
}).then(function(e) { 
    console.log(e) 
}).catch(function(e) { 
    console.log(e); 
}); 
+0

Имеет смысл для меня, но когда я запускаю этот код, я получаю «Ошибка: [object Object]» ответ – tan

+1

Возможно, https://docs.feathersjs.com/debugging/readme.html может помочь получить более качественное сообщение об ошибке (может быть, ошибка в том, что он неправильно преобразовывает ошибку). – Daff

+0

Необходимо использовать патч вместо обновления. Благодаря! – tan

Смежные вопросы