Я борюсь с вызовом обновления, который по какой-то причине не работает. Для краткого контекста у нас есть приложение Node.js, работающее на Sails.js с Waterline ORM.
Согласно моему файлу package.json, вот версии, которые я использую:
- подключить-монго: ^ 1.3.2
- монгодб: ^ 2.2.29
- паруса: ~0,12,4
- паруса-монго: ^ 0.12.3
У меня есть коллекция под названием «продукты», и каждый продукт выглядит в базе данных следующим образом:
{
"_id" : ObjectId("59d5f12025423dc0261c911d"),
"category" : ObjectId("59a9bcf984d756998eaa22e5"),
"status" : "pendingReview",
"isDeleted" : false,
"events" : [
{
"when" : 1507193120,
"actor" : "56cc0f76e1a25cde0d2c15ab",
"action" : "Submitted product",
"note" : "Jeff added this product. It is awaiting review."
}
],
"productId" : "171005-00000",
"createdAt" : ISODate("2017-10-05T08:45:20.538Z"),
"updatedAt" : ISODate("2017-10-05T08:45:20.538Z")
}
У меня есть пользовательский интерфейс, в котором пользователь может «одобрить» несколько продуктов, прежде чем они будут показаны посетителям веб-сайта. Для этого я хочу просто обновить несколько записей, изменив ключ status
на «одобрено» и добавив событие в массив events
каждого документа. Событие должно находиться в позиции 0 массива. Я пытаюсь обновить эти записи с помощью следующего кода, но он не работает:
var moment = require('moment');
Products.native(function(error, collection) {
if (error) {
throw error;
}
collection.update(
{ _id: ['59d5f12025423dc0261c911d'] },
{
$set: {
status: 'approved',
$push: {
events: {
when: moment().unix(),
actor: req.body.userId,
action: 'Approved product',
note: req.body.userName + ' approved this product.'
}
}
}
},
{ multi: true },
function(error, count, status) {
if (error) {
sails.log.error(error);
return res.serverError('Database error. Reference ID: ' + req.referenceId);
}
return res.ok(count);
});
});
Когда я запускаю этот запрос, я не получаю никаких ошибок, и когда я проверяю свою базу данных, запись не была обновлена. Я получаю следующие данные, когда я запускаю запрос:
{
"ok": 1,
"nModified": 0,
"n": 0
}
Что тут происходит? Почему не обновляется? Если я правильно понимаю, запрос может найти документ, но он не обновляется. Это правильно? Если да, то как мне это решить? Спасибо.