2010-10-03 22 views
14

¿Hay alguna manera de ordenar sub documentos en una consulta de mongo? Ejemplo (Colección Blog):Clasificar documentos secundarios en MongoDB

{ 
    "_id" : ObjectId("4c69d19532f73ad544000001"), 
    "content" : "blah blah blah", 
     "comments" : { 
{"author": "jim", "content":"comment content 1", "date" : "07-24-1995"}, 
{"author": "joe", "content":"comment content 2", "date" : "07-24-1996"} 
{"author": "amy", "content":"comment content 3", "date" : "09-10-1999"} 
     } 
} 
{ 
    "_id" : ObjectId("4c69d19532f73ad544000002"), 
    "content" : "blah blah blah", 
     "comments" : { 
{"author": "jim", "content":"comment content 1", "date" : "07-24-1995"}, 
{"author": "joe", "content":"comment content 2", "date" : "07-24-1996"} 
{"author": "amy", "content":"comment content 3", "date" : "07-24-1997"} 
     } 
} 

quiero conseguir mi blog ordenadas en forma embargo decido y luego tener comentarios ordenados dentro de mis entradas de blog por orden inverso de fecha o cualquier otra clasificación que quiero. ¿Es eso posible con mongoDB?

Respuesta

1

No es posible directamente desde MongoDB, sin embargo, cuando extrae el documento, puede ordenar la matriz como si fuera una matriz de objetos, utilizando cualquier método de ordenamiento nativo que tenga su lenguaje. Así es como hago comentarios en mi blog con MongoDB.

Código PHP

/* Takes an array of comments and turns them into native objects */ 
public static function loadMany($pcomments) 
{ 
    $comments = array(); 
    if(isset($pcomments) && count($pcomments) > 0) 
    { 
     foreach($pcomments as $key => $comment) 
     { 
      $comment['data']['index'] = $key; 
      $comments[] = Comment::loadOne($comment['data']); 
     } 
    } 
    usort($comments, "comment_compare"); 
    return $comments; 
} 

/* Compares comment timestamps */ 
function comment_compare($a, $b) 
{ 
    if($a->timestamp->sec == $b->timestamp->sec) 
    { 
     return 0; 
    } 
    return ($a->timestamp->sec < $b->timestamp->sec) ? -1 : 1; 
} 
4

En la versión 2.4 o superior mongo, puede utilizar $ especie durante la actualización. El nuevo modificador le permite ordenar el documento secundario.

Más información puede leer esta página, http://docs.mongodb.org/manual/reference/operator/sort/

+0

Pero el modificador $ especie parece tratar con $ empuje, si por ejemplo, quiero resolverlo por votos al hacer $ inc, parece imposible – Yarco

Cuestiones relacionadas