2014-06-05 1 views
0

J'ai une collection dans laquelle l'élément a une liste d'objets. Je voudrais utiliser $orderBy sur un champ spécifique sur le premier élément d'une liste d'objets que chaque document a. Par exemple: chaque document représente un utilisateur et chaque utilisateur a une liste de sessions. Je voudrais trier les utilisateurs sur la date stockée dans la première session de la liste.

Peut-être que quelque chose comme { $orderby: { "sessions[0].timestamp" : 1 } }?

Est-ce possible?

+1

Pouvez-vous développer votre question avec un exemple de ce que vous voulez dire, s'il vous plaît? –

+0

fait: chaque document représente un utilisateur, et chaque utilisateur a une liste de sessions. Je voudrais trier les utilisateurs sur la date stockée dans la première session de la liste. – fstab

Répondre

1

L'opération que vous demandez est simple avec .sort(). Peut-être que vous n'êtes pas au courant de l'utilisation de "notation par points" avec MongoDB

les documents suivants comme un exemple minimal:

{ 
    "name" : "Fred", 
    "sessions" : [ { "timestamp" : ISODate("2014-06-05T10:38:24.371Z") } ] 
} 
{ 
    "name" : "Barney", 
    "sessions" : [ { "timestamp" : ISODate("2014-06-05T10:38:34.557Z") } ] 
} 

Exécutez la requête suivante:

db.users.find({},{ _id: 0}).sort({ "sessions.0.timestamp": -1 }) 

Et obtenir le résultat ordonné par le premier élément du tableau, champ d'horodatage:

{ 
    "name" : "Barney", 
    "sessions" : [ { "timestamp" : ISODate("2014-06-05T10:38:34.557Z") } ] 
} 

{ 
    "name" : "Fred", 
    "sessions" : [ { "timestamp" : ISODate("2014-06-05T10:38:24.371Z") } ] 
} 
+0

Merci beaucoup pour votre réponse. Cela résout en fait mon problème. En fait, j'ai une autre question: la "notation par points" inclut-elle des opérations comme le compte? En d'autres termes, si je voudrais trier les utilisateurs par nombre de sessions, comment ferais-je? – fstab

+1

@francescostablum Si vous avez une autre question, n'hésitez pas à poster une autre question sur l'échange de pile. Quelqu'un va certainement y répondre pour vous. Il peut même être considéré comme une question digne de voter –

Questions connexes