복붙노트

[MONGODB] 어떻게 MongoDB를 함께 배열의 순서를 변경하려면?

MONGODB

어떻게 MongoDB를 함께 배열의 순서를 변경하려면?

I가 증가하고 MongoDB의 오브젝트의 배열의 요소의 위치를 ​​감소 할 수 있어야한다.

나는 MongoDB의 API의 <업데이트> API 보았지만 나에게 그렇게 할 수 있도록 아무것도 찾을 수 없습니다.

나는 몽구스를 통해 findOneAndUpdate를 사용하려고하고 나는 아래로 이동하거나 시도하고 요소의 인덱스를 알고있다.

베이스 64 인코딩 된 이미지의 배열 항목의 예 :

{ 
  images: [
    "img1",
    "img2",
    "img3"
  ]
}

그리고 위 또는 아래로, 예를 들어, "IMG2"를 이동하고자하는 (그러나 갈 곳이 없기 때문에 "이미지"에 수까지 밀어해서는 안됩니다).

I가 "IMG2을"밀어 원하는 경우, 결과는 다음과 같습니다

{ 
  images: [
    "img2",
    "img1",
    "img3"
  ]
}

나는, 인덱스를 변경 교환, 또는 아래 / 위로 밀어를 통해이를 경우 문제가되지 않습니다.

해결법

  1. ==============================

    1.마찬가지로 @ blakes 일곱 당신이 그것을 할 수있는 두 가지 방법이 말했다 :

    마찬가지로 @ blakes 일곱 당신이 그것을 할 수있는 두 가지 방법이 말했다 :

    , 잡아 업데이트하고 밀고

    db.images.find({ _id: '' }, { images : 1 })
    .then(function(img) {
      var tmpImg = img.images[0];
      img.images[0] = img.images[1];
      img.images[1] = tmpImg;
    
      db.images.update({ _id: img._id }, { $set: { images: img.images } });
    })
    

    직접 업데이트 (당신은 클라이언트에서 이미지를 가지고 인덱스를 알고있는 경우) $ 위치를 사용하여,

    db.images.update({ _id: '' }, { $push: { images: { $each: ['img2'] }, $position: 0 } } } )
    .then(function() {
      db.images.update({ _id: '' }, {$unset: {'images.2': 1}})
    });
    

    https://docs.mongodb.org/manual/reference/operator/update/position/

    그러나, 나는 당신이 예를 들어 가상의 순서로 사용하여 이미지를 저장하는 방법을 재 설계해야한다고 생각 :

    {
      images: [
        { base64: 'img1', order: 0, _id: 'img1' },
        { base64: 'img2', order: 1, _id: 'img2' },
        { base64: 'img3', order: 2, _id: 'img3' }
      ]
    }
    

    이 방법, 당신은 단지 _id를 사용하여 업데이트하거나, 모든 IMG2의 순서를 변경 떨어 뜨리거나 이미지를 대체하여 전체 모음을 업데이트, 가상 순서 인덱스를 사용하여 이미지를 주문할 수 등

  2. from https://stackoverflow.com/questions/35810951/how-to-change-order-of-array-with-mongodb by cc-by-sa and MIT license