2016-08-31 5 views
0

목록을 정렬 가능하게 만들고 mongodb에서 순서를 유지하려고합니다.mongoDB와 정렬 가능한 목록

[기타 "일부 번호 #", "다른 번호 #"]

:리스트가 정렬 될 때마다, 프론트 엔드는, 예를 들어, 번호에 의해 항목의 갱신 순서와 AJAX로 배열 보낸다 나는 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의 순서를 변경하지 않습니다 바랍니다. 단지 배열 항목을 업데이트합니다. 당신이 데이터베이스에서 주문하려는 경우 괜찮아요, 당신은 로컬 정렬 및 db에 전체 배열을 설정해야합니다. –

+0

괜찮지 만 왜 DB가 변경되지 않습니다 확실하지 않습니다. gallery.save를 사용합니다. –