sql >> Database >  >> NoSQL >> MongoDB

Hoe de volgorde van de array wijzigen met MongoDB?

Zoals @blakes-seven al zei, je kunt het op twee manieren doen:

Grijpen, bijwerken en pushen

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

Rechtstreeks bijwerken (als je de afbeelding op de client hebt en de indexen kent), gebruik je $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/

Ik denk echter dat u de manier waarop u uw afbeeldingen opslaat opnieuw moet ontwerpen, bijvoorbeeld door een virtuele volgorde te gebruiken:

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

Op deze manier kunt u uw afbeeldingen ordenen met behulp van een virtuele volgorde-index, ze bijwerken met alleen de _id, of de hele collectie bijwerken door de volgorde van alle img2 te wijzigen, een afbeelding weg te laten of te vervangen, enz.




  1. MongoDB - Een document verwijderen

  2. Mongodb:Voer een datumbereikquery uit vanaf de ObjectId in de mongo-shell

  3. Mongodb telt alle array-elementen in alle objecten die overeenkomen met criteria

  4. Wat is de juiste manier om te indexeren in MongoDB als er een grote combinatie van velden bestaat?