2016-08-31 4 views
0

Я хочу сделать список отсортированным и сделать заказ в mongodb. Каждый раз, когда список отсортирован, то интерфейс отправляет массив с помощью AJAX с обновленным порядком элементов по идентификатору, например:Сортируемый список с mongoDB

[ «некоторый ID #», «какой-либо другой идентификатор #», и т.д.]

Я новичок в mongodb и не уверен, как обновить db соответственно. То, что я до сих пор в запросе пост:

Gallery.findById(req.params.galleryId, function(err, gallery) { 
    req.body.ids.forEach(function(id, index) { 
     gallery.Galleryslides.update({_id: id}, {sortIndex: index}); 
    }); 
    gallery.save(function() { 
     res.json({status: 'ok'}); 
    }); 
}); 

Galleryslides массив в галерее схемы, содержащей массив слайдов. Когда я запускаю вышеуказанное, я получаю:

TypeError: gallery.Galleryslides.update is not a function 

Любые мысли?

ответ

1

Вы упомянули Galleryslides - массив, поэтому для этого не существует метода update.

Так оно и должно быть, как (если это массив):

gallery.update({'Galleryslides._id': id}, {'$set': {'Galleryslides.$.sortIndex': index}}); 

Если это встроенный документ:

gallery.Galleryslides.id(id).sortIndex = index; 

Если это не отношения: На самом деле нет необходимости идти через родительскую модель. Просто обновите модель GallerySlide.

Пожалуйста, обратите внимание на async

async.eachOf(req.body.ids, function(id, index, callback){ 
    GallerySlide.update({_id: id}, {sortIndex: index}, callback); 
}, function(err){ 
    if(err) return res.json(err); 
    res.json({status: 'ok'}); 
}); 
+0

Хм выглядит хорошо, но не меняет порядок в БД по какой-то причине –

+0

@BenDavidow Absoluteley не изменить порядок в дб. Он просто обновляет элементы массива. Если вы хотите заказать db в порядке, вам нужно отсортировать локально и установить весь массив в db –

+0

в порядке, но не знаете, почему db не меняется. Я использую gallery.save –

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