Si vous souhaitez effectuer un tel tri, vous souhaiterez probablement stocker vos données d'une manière différente. MongoDB n'est généralement pas aussi efficace pour manipuler les documents imbriqués que les champs de niveau supérieur. Dans votre cas, je recommanderais de séparer ptime, pt et uid dans leur propre collection :
messages
{
"_id":417,
"ptime":ISODate("2013-11-26T11:18:42.961Z"),
"type":"1",
"txt":"test message"
},
utilisateurs
{
"id":417,
"ptime":ISODate("2013-11-26T11:18:42.961Z"),
"uid":"52872ed59542f",
"pt":ISODate("2013-11-26T11:18:42.961Z")
},
{
"id":417,
"ptime":ISODate("2013-11-26T11:18:42.961Z"),
"uid":"524eb460986e4",
"pt":ISODate("2013-11-26T11:18:42.961Z")
},
{
"id":417,
"ptime":ISODate("2013-11-26T11:18:42.961Z"),
"uid":"524179060781e",
"pt":ISODate("2013-11-27T12:48:35Z")
}
Vous pouvez ensuite définir un index sur la collection d'utilisateurs pour uid, ptime et pt.
Cependant, vous devrez effectuer deux requêtes pour obtenir également les messages texte eux-mêmes.