Я использую функцию сортировки jquery ui (source), чтобы переупорядочить элементы. Я создал пользовательские обратные вызовы для создания списка этих элементов. Поэтому, когда я перемещаю элемент, всем элементам присваивается новый идентификатор позиции. Это может выглядеть следующим образом:Обновление нескольких документов с различными значениями
[{
id_of_element_in_database: 12,
new_position: 0
}, {
id_of_element_in_database: 16,
new_position: 1
}, {
id_of_element_in_database: 14,
new_position: 2
}]
Я посылаю этот список мой задний конец, делая простой Ajax размещать
$.post('/position', { data: list });
Маршрут
router.post('/position', (req, res) => {
console.log(req.body.data); // This prints the array of objects above.
});
Схема
mongoose.Schema({
id: Number,
position: Number,
...
});
Теперь я не могу понять, как эффективно изменить положение всех документов. Создание дрянной петли массива и выполнение нескольких запросов базы данных не может быть лучшим подходом.
Я пробовал это здесь, и это кажется настолько неправильным.
for (let i in req.body.data) {
collection.update({ id: req.body.data[i].id }, { position: req.body.data[i].position });
Должно быть что-то еще, что я могу сделать для достижения этого. Я пробовал Google без везения.
Спасибо! Я попробую это и вернусь к вам! –
С помощью этого небольшого tweak 'parseInt (item.id)', 'parseInt (item.position)' и удаляемого индекса 'unique' из коллекции это решение работает безупречно. Спасибо! –
@JonathanNielsen Не стоит беспокоиться, рада помочь. – chridam