2012-10-10 4 views
2

J'ai besoin pour implémenter la logique FIFO avec la collection MongoDB:collections MongoDB FIFO pile

  1. Pop le premier document de la collection MongoDB.
  2. Poussez le document à la collecte MongoDB et le placer comme un dernier document.

Les documents de la collection n'ont aucun index sauf _id (ObjectId) généré automatiquement.

Je me demande, est-il possible de findAndRemove le premier document de la collecte et de garantir que les opérations push et pop exécuteront FIFO pile atomiquement? Je sais qu'il est possible de faire avec un tableau à l'intérieur du document avec des opérations atomiques push et pop, mais le problème principal est que si je stocke toutes mes données dans le tableau de 1 document, sa taille dépassera 16Mo (le maximum taille autorisée du document MongoDB)

de Merci à l'avance, Valentin

+0

chèque collection plafonnée. – AlphaB

Répondre

3

Si vous accédez à votre pile à partir d'une seule machine, vous pouvez le faire en utilisant findAndRemove:

db.col.findAndModify({query:{}, sort:{i: -1}, remove:true}) 

Cela renverra la valeur retirée et retirer le document lui-même atomiquement votre demande. Où "i" est un champ trié par heure (_id fonctionne s'il s'agit d'un ObjectId). Si vous utilisez la pile FIFO/collection de plusieurs instances, vous devrez assurer en quelque sorte que le « i » Les valeurs sont atomiquement a augmenté dans tous les cas ou vous devrez vivre avec la collection étant FIFO-ish plutôt que proprement.

+0

Note: findAndModify Appliquer uniquement sur un seul document. http://stackoverflow.com/questions/19065615/how-to-delete-n-numbers-of-documents-in-mongodb si plus d'un document doit être supprimé. –

1

Parce que le document _id est la valeur de la date de création de documents, vous pouvez trier les documents pour récupérer le premier/dernier créé. Pour obtenir le dernier document créé, vous pouvez le faire:

db.collection.find().sort({ _id : -1 }).limit(1) 

Et puis, l'ajout d'un document à la collection ajoutera à la fin des collections.

+0

Est-il possible de faire une recherche/suppression atomique? – Valentin

+0

Vous trouverez une bonne aide sur la question [ici] (http://www.mongodb.org/display/DOCS/Atomic+Operations) –

Questions connexes