Obtenez des champs imbriqués avec MongoDB shell
J'ai "utilisateurs" de la collection "listes de contrôle" sur le terrain, qui ont de nombreux intérieure champs de trop, un de qui est "arrangeable_values" (le deuxième champ dans les "listes de contrôle").
J'ai besoin de trouver pour chaque utilisateur dans "utilisateurs" de la collection, chaque "arrangeable_values" dans les "listes de contrôle".
Comment puis-je faire avec mongodb shell ?
Voici un exemple de modèle de données :
> db.users.findOne({'nickname': 'superj'})
{
"_id" : ObjectId("4f6c42f6018a590001000001"),
"nickname" : "superj",
"provider" : "github",
"user_hash" : null,
"watchlists" : [
{
"_id" : ObjectId("4f6c42f7018a590001000002"),
"arrangeable_values" : {
"description" : "My introduction presentation to node.js along with sample code at various stages of building a simple RESTful web service with journey, cradle, winston, optimist, and http-console.",
"tag" : "",
"html_url" : "https://github.com/indexzero/nodejs-intro"
},
"avatar_url" : "https://secure.gravatar.com/avatar/d43e8ea63b61e7669ded5b9d3c2e980f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
"created_at" : ISODate("2011-02-01T10:20:29Z"),
"description" : "My introduction presentation to node.js along with sample code at various stages of building a simple RESTful web service with journey, cradle, winston, optimist, and http-console.",
"fork_" : false,
"forks" : 13,
"html_url" : "https://github.com/indexzero/nodejs-intro",
"pushed_at" : ISODate("2011-09-12T17:54:58Z"),
"searchable_values" : [
"description:my",
"description:introduction",
"description:presentation",
"html_url:indexzero",
"html_url:nodejs",
"html_url:intro"
],
"tags_array" : [ ],
"watchers" : 75
},
{
"_id" : ObjectId("4f6c42f7018a590001000003"),
"arrangeable_values" : {
"description" : "A Backbone alternative idea",
"tag" : "",
"html_url" : "https://github.com/maccman/spine.todos"
},
"avatar_url" : "https://secure.gravatar.com/avatar/baf018e2cc4616e4776d323215c7136c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
"created_at" : ISODate("2011-03-18T11:03:42Z"),
"description" : "A Backbone alternative idea",
"fork_" : false,
"forks" : 31,
"html_url" : "https://github.com/maccman/spine.todos",
"pushed_at" : ISODate("2011-11-20T22:59:45Z"),
"searchable_values" : [
"description:a",
"description:backbone",
"description:alternative",
"description:idea",
"html_url:https",
"html_url:github",
"html_url:com",
"html_url:maccman",
"html_url:spine",
"html_url:todos"
],
"tags_array" : [ ],
"watchers" : 139
}
]
}
Vous devez vous connecter pour publier un commentaire.
Pour le document ci-dessus, les éléments suivants find() requête en extraire le "surnom" du document et de ses associés "arrangeable_values" (où le document est dans la collection users):
Le résultat que vous obtenez pour votre document unique exemple serait:
MongoDB requêtes de l'ensemble des documents. Vous êtes à la recherche d'un champ à l'intérieur d'un tableau à l'intérieur du document et cela cassera le
find()
.Le problème ici est que toute base
find()
requête, sera de retour tous les documents correspondants. Lefind()
ne avez la possibilité de retourner uniquement des domaines spécifiques. Mais cela ne fonctionnera pas avec votre tableau de sous-objets. Vous pourriez retournewatchlists
, mais paswatchlist entries that match
.Tel qu'il est, vous avez deux options: