Je suis l'entité suivante persistaient sur mongo
dans une collection users
:MongoDB et requête complexe sur les tableaux commandés
{
"fullname": "Luke Tomson",
"nicknames": [
{
"name": "lukeone",
"created": ISODate("2011-05-18T19:42:56.411Z")
},
{
"name": "magicluke",
"created": ISODate("2012-01-12T19: 42: 56.411Z")
},
{
"name": "superluke",
"created": ISODate("2012-03-27T19: 42: 56.411Z")
}
}
]
}
Comment puis-je obtenir la dernière surnom name
pour un utilisateur dont fullname
est "Luke Tomson"
? Et plus précisément, comment puis-je récupérer dans le shell mongo un index spécifique (le premier ou le dernier) d'un tableau trié qui a été trié sur un champ spécifique (dans ce cas, created
).
Merci
Et y at-il un moyen de récupérer réellement l'utilisateur dont le dernier surnom est "superluke"? – Mark
Si vous interrogez un élément de tableau avec une valeur non-tableau, il retournera tous les enregistrements où au moins l'un des enregistrements contient la valeur spécifiée. Si vous n'avez vraiment besoin que des enregistrements où '' superluke'' est le dernier surnom, alors vous pouvez revenir à la requête de style table-scan '' $ where''. La chaîne que vous passez à '' $ where'' devrait être une seule instruction Javascript qui évalue à un booléen et '' this'' est un seul enregistrement MongoDB. '' db.users.find ({$ where: "this.nicknames [this.nicknames.length-1] .name == 'superluke'"}) ''. Vous pourrez peut-être chaîner '' find'' pour réduire la taille de l'analyse. –
Oh, en passant, [cette page est votre ami] (http://www.mongodb.org/display/DOCS/Advanced+Queries). C'est très dense, mais j'ai tout ce que je sais sur MongoDB de cette page ou de l'autre que j'ai lié à vous. (Et l'expérience de lecture avec la bibliothèque node-mongodb-native.) –