MongoDB domaine de l'ordre et de document de changement de position après la mise à jour
Je suis à l'apprentissage de MongoDB et j'ai remarqué que chaque fois que je fais une mise à jour sur un document, le champ en cours de mise à jour est poussé jusqu'à la fin de la commande, donc si j'avais quelque chose comme:
db.collection.save({field1: value1, field2: value2, ..., field 10: value10});
db.collection.update({field1: value1}, {$set: {field2: new_value}});
alors si vous n':
db.collection.find();
il affichera:
{ "field1":"value1", ..., "field10":"value10", "field2":"new_value"}
Vous pouvez voir comment le domaine des changements d'ordre où la mise à jour de champ est poussée à la fin du document. En outre, le document lui-même est poussé à la fin de la collectoin. Je sais que c'est un "schéma" de la DB et il ne peut pas être un énorme problème, mais il n'a tout simplement pas le look "joli" :). Est-il un moyen de faire une mise à jour en place sans modification de l'ordre?
OriginalL'auteur techexpert | 2011-02-18
Vous devez vous connecter pour publier un commentaire.
MongoDB alloue de l'espace pour un nouveau document basé sur un certain facteur de remplissage. Si votre mise à jour augmente la taille du document au-delà de la taille allouée à l'origine le document sera déplacé à la fin de la collecte. Le même concept s'applique à des champs dans un document.
OriginalL'auteur Bernie Hackett
Pour info, dans MongoDB 2.6 mises à jour permettra de préserver l'ordre des champs, avec les exceptions suivantes:
les champs dans le document.
OriginalL'auteur helmy
À la fois de la structure du document et la structure de collecte dans MongoDB basé sur JSON principes. JSON est un ensemble de paires clé/valeur (en particulier fieldName/fieldValue des documents et des index/document de collecte). De ce point de vue, il ne semble pas que vous pouvez compter sur commande à tous.
Afin de clés peut importe à mongo, certain de trouver les requêtes renvoient des résultats ou pas de résultats en fonction de l'ordre des clés pour les documents imbriqués. Voir le devblog.me/wtf-mongo par exemple, et si le lien ne meurt jamais, le trouver sur wayback machine.
OriginalL'auteur Raman
Dans le cas des documents si la taille du champ de changements, il écrit un nouveau document avec les champs triés par nom de champ.
Ce comportement peut être vu avec les énoncés suivants
Cas 1: Pas de changement dans la taille de champ, donc pas de changement dans l'ordre des champs
Cas 2: Champ de changements de taille et les champs sont reodered
Est-il une raison particulière pour laquelle vous ne voulez pas que les champs réorganisées? Le ci-dessus a été à l'aide de 1.8.0_rc0 sur OS X
OriginalL'auteur Sridhar
J'ai créé un projet qui crée un custom mongorc.js qui trie le document de touches par défaut pour vous. Il est appelé Mongo Hacker
Je me demande comment Mongo Hacker trie les champs. A..Z? ou enregistre les métadonnées supplémentaires à la base de données? parce que les deux semblent comme de mauvaises options. A...z va trier
key_1, key_10, key_2
tandis que les métadonnées de manger plus de SSD/CPU/RAM + introduire de nouveaux domaines inconnus en DB qui peut être remplacée par de la logique d'application. Pouvez-vous donner plus de clarté sur la façon dont il trie?Il n'a pas d'enregistrer des métadonnées supplémentaires. Il fait le tri sur le client (shell) qui est à bas prix. Il n'utilise pas de supplément cpu/mémoire sur la base de données mais n'utiliser qu'une quantité négligeable de la mémoire et du processeur dans le client, car la plupart des documents ont un nombre limité de touches + de nidification et il ne trie comme ils sont imprimés (venant du curseur). Si le coût minimal est inacceptable pour vous, il ya une option pour la désactiver.
OriginalL'auteur Tyler Brock
Raman , est droit , on ne peut pas trier un dictionay , mais nous pouvons la visualisation de la dictonary, donc on ne peut pas trier déposée de la commande de la documentation , mais je peux voir qu'il a ordonné .
Par exemple en perl to_json l'option canonique
(canonique option) sortie d'objets JSON en triant leurs clés. C'est l'ajout d'un relativement haut dans le ciel . (bien sûr, nous n'avons plus d'une opération de tri ...)
OriginalL'auteur Sérgio