{ _id: 55c02ab7684c7a601ca24898,
title: 'this is a better poll',
link: 'this-is-a-better-poll',
creator: 'user',
__v: 0,
choices:
[ { text: 'Option 1', votes: 0 },
{ text: 'Option 2', votes: 0 } ] }
Это пример опроса. Допустим, у меня их несколько в моей базе данных.Модель Mongoose - Обновление массива
мне нужно обновить количество голосов на запрос POST со стороны клиента путем сравнения Option быть размещены на сервере и сравнивая его с базой данных.
Поскольку существует несколько опросов в базе данных, я использую ссылки найти точный объект базы данных.
Я попробовал несколько способов: обновить подсчет голосов, но ничего не работает, изменение названия работает безупречно. Зачем?
Метод, который не удалось:
for example selection is:
var selection = 'Option 1';
var link = 'this-is-a-better-poll';
1) Model.where({"choices.text": selection}).update({$set: {"choices.votes" : 1}});
2) Model.update({"choices.text": selection}, {'$set': {"choices.$.votes" : 1}});
3) Model.findOne({
link: link
}, function(err, found) {
if (err) {
return res.status(400).send({
message: 'Error'
});
}
if (found) {
console.log(found.choices);
var arr = found.choices;
for (var i = 0; i < arr.length; i++) {
if (arr[i].text == selection) {
arr[i].votes = 1
console.log(arr[i].votes = 1);
}
found.save(function(err) {
if (err) res.send(err);
res.status(200).send({
message: 'Succes'
});
});
}
}
});
Как я могу решить эту проблему? Как обновить подсчет голосов при выборе?
Это очень подробный ответ. Как вы думаете, было бы лучше добавить новый ключ в моей схеме, такой как (голосовой ключ), а не встраивание внутри выборов?Затем я добавляю все голосовые опции в проголосовавший ключ и выполняю совпадение и длину массива клиентской стороны для вычисления количества голосов. Это лучше? Так как все количество голосов должно отображаться только на стороне клиента. – cusX
@cusX Не могу сказать, что именно вы действительно хотите без дополнительной информации. Лучше всего спросить, конечно, с новым вопросом, где вы можете объяснить случай, на который вы хотите получить ответы. –