MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да променя реда на масива с MongoDB?

Както каза @blakes-seven, имате два начина да го направите:

Захващане, актуализиране и натискане

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 } });
})

Актуализиране директно (ако имате изображението на клиента и знаете индексите), като използвате $position

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, пуснете или замените изображение и т.н.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Десериализиране на полиморфни типове с MongoDB C# драйвер

  2. $unwind обект в рамката за агрегиране

  3. Сравнение на агрегиране на MongoDB:group(), $group и MapReduce

  4. Внедряване на пагинация с MongoDB, Express.js и Slush

  5. Как да разположите Open edX MongoDB база данни за висока наличност