2011-09-30 15 views
8

Ho un documento che sembra qualcosa di simile:ordina per MongoDB documento secondario contare

{ 
     "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"), 
     "parent_id" : 0, 
     "ratings" : [ 
       "20716", 
       "78167" 
     ], 
     "text" : "test" 
} 

E 'possibile ordinare in base al conteggio di "ospiti"? Fare qualcosa di simile:

db.comments.find().sort({rating.count(): -1})

genera un errore:

SyntaxError: missing : after property id (shell):0

risposta

8

Questo non è direttamente possibile con MongoDB [1]

Una soluzione, se si utilizzano spesso questa domanda, è quello di incremento e decremento un campo 'conta' ogni volta che si modifica la matrice di voti e si ordina su quel campo.

documento

Si sarà simile:

{ 
    "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"), 
    "parent_id" : 0, 
    "ratings" : [ 
      "20716", 
      "78167" 
    ], 
    count : 2 
    "text" : "test" 
} 

e la tua ricerca con

db.comments.find().sort({count: -1}) 
+0

sì, questa è l'unica opzione finora, questo è lo stato 10gen nelle diapositive di progettazione –

+0

e con il nuovo framework di aggregazione è ancora l'unica opzione? – basilboli

16

C'è una risposta marcata già, ma ho pensato di aggiungere che questo può essere fatto utilizzando l'aggregazione framework:

db.comments.aggregate([ 
    { $unwind: "$ratings" }, 
    { $group : { _id : { parent_id: "$parent_id", text: "$text" }, 
       ratingsCount : { $sum : 1 } } }, 
    { $sort : { ratingsCount : -1 } } 
]) 
Problemi correlati