sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur ändrar man ordning på array med MongoDB?

Som @blakes-seven sa, du har två sätt att göra det:

Ta tag, uppdatera och driva

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

Uppdaterar direkt (om du har bilden på klienten och känner till indexen), med $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/

Däremot tycker jag att du bör göra om hur du lagrar dina bilder, med till exempel en virtuell beställning:

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

På så sätt kan du beställa dina bilder med hjälp av ett virtuellt beställningsindex, uppdatera dem med endast _id, eller uppdatera hela samlingen genom att ändra ordning på alla img2, ta bort eller ersätta en bild, etc.




  1. Sortera kapslad array av objekt

  2. Fel vid anslutning till MongoDb Atlas Server

  3. Partiella index i mongodb / mongoose

  4. MongoDB byter namn på databasfält inom array