J'ai une requête de Mongo Trouver qui fonctionne bien pour extraire des champs spécifiques d'un grand document comme ... ... Ceci produit la sortie suivante. Notez comment la sverstion vient avant l'aversion dans le document, même si ma projection a demandé une aversion avant Sversion. P> ... Le problème est que je veux que la sortie soit. .. P> { "profile" : { "ModelID" : "LZ241M4", "AVersion" : "4.0.3", "SVersion" : "3.5" } }
{ "profile" : { "ModelID" : "LZ241M4", "AVersion" : "4.0.3", "SVersion" : "4.0" } }
4 Réponses :
Je l'obtiens maintenant. Vous souhaitez retourner les résultats commandés par "champs" plutôt la valeur d'un champs.
Une réponse simple est que vous ne pouvez pas faire cela. Peut-être que c'est possible avec le nouveau cadre d'agrégation. Mais cela semble excéder simplement pour commander des champs. P>
Le deuxième objet dans une requête trouvée est d'inclure ou d'exclure les champs retournés non pour les commander. P>
{
_id : 0, // 0 means exclude this field from results
"profile.ModelID" : 1, // 1 means include this field in the results
"profile.AVersion" :2, // 2 means nothing
"profile.SVersion" :3, // 3 means nothing
}
Je ne partage pas votre opinion que son "overkill" à avoir les champs retournés dans l'ordre que la projection recommande, mais son Mongo; Je suis habitué à la déception. Merci de votre aide.
Donc, la version "commandée" et "non ordonnée" représente les mêmes données. Dans SQL, la commande de colonne peut être importante pour des éléments tels que DataReader code> où vous choisissez une colonne par numéro. Mais avec Mongodb, vous récupérez efficacement une table de hachage. Il n'y a pas de fonctionnalité de commande, car l'ordre clé d'une table de hachage n'est pas censé être pertinent. Cependant, j'aime la proposition que le numéro d'inclusion pourrait être un ordre. C'est certainement digne d'un billet Jira. ( jira.mongodb.org )
Je n'ai pas goûté cela, mais à en juger par la sortie @bob gagné, le "2" et "3" signifiait quelque chose: ils étaient équivalents à utiliser "1". IE: Zero signifie que vous n'incluez pas, les moyens non nuls incluent.
D'un point de vue pratique, et purement comme une préférence personnelle, il serait utile de pouvoir commander les champs de sortie lors de l'utilisation de la coquille MongoDB au cours du développement ou du débogage. Je ne toujours i> veut voir le champ _id code> comme première colonne de sortie lorsque je fais un trouver () code>. Ouais, je May i> veut voir _ID code> mais je suis plus intéressé par d'autres champs d'abord, toujours i> Voir _id code > Tout d'abord, lorsque cela est inclus, peut être considéré comme du bruit.
@Gatesvp: Un cas d'utilisation évident d'ordre de champ étant pertinent affiche les résultats de Rechercher () code> dans la coque de Mongo. J'ai déposé un ticket pour ça - Jira.mongodb.org/Browse/server-12599 a>
@Dandascalescu Je vois de l'endroit où vous venez, mais c'est purement un problème d'affichage et purement dans la coquille. Essayer d'obtenir de jolis affichages hors de la coquille n'est vraiment pas un concept facile. Surtout avec des documents imbriqués et d'autres choses.
Je l'ai atteint en faisant saillie les champs à l'aide d'alias, au lieu d'inclure et de l'exclusion de 0 et 1.
Essayez ceci:
Cela devrait être la réponse sélectionnée valide. Merci @gulnur!
Une autre solution que j'ai appliquée pour y parvenir est la suivante:
db.profiles
.find({ "profile.ModelID" : 'LZ241M4' })
.toArray()
.map(doc => ({
profile: {
ModelID: doc.profile.ModelID,
AVersion: doc.profile.AVersion,
SVersion: doc.profile.SVersion
}
}))
Où est votre requête? Avez-vous envisagé d'utiliser un tri.
Ma requête est là-haut. Sur une ligne sa: db.profiles.find ({"profil.modelid": 'lz241m4'}, {_id: 0, "profil.modelid": 1, "profil.version": 2, "profil.sversion": 3}); Je n'ai pas considéré comme trier (), mais cela trie les "lignes", j'essaie de trier les "colonnes".
Désolé, je ne sais pas comment j'ai raté ça. Je pense que vous savez déjà, mais il y a une telle chose que "colonnes" dans mongodb. Est-ce votre document entier ou est un profil un sous-ensemble de plus grand document?
"Profil" est un sous-document d'un document plus important. Je mets les citations autour des "lignes" et des "colonnes" parce que je sais que Mongo est tout sur les documents et les champs, mais aux fins de cette conversation "champs" et "colonnes" sont conceptuellement similaires. Ma projection a demandé les "champs" dans l'ordre {_id: 0, "profil.modelid": 1, "profil.version": 2, "profil.sversion": 3} mais la coque JavaScript Mongo ne produit pas la sortie pour chaque document de cette façon. Je cherche un moyen de réorganiser cette sortie par document. Merci pour ton aide