2011-09-30 14 views
8

Mam dokument, który wygląda mniej więcej tak:MongoDB sortowanie wg dokument podrzędny liczyć

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

to możliwe, aby sortować według zliczania „oceny”? Robi coś takiego:

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

zgłasza błąd:

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

Odpowiedz

8

nie jest to bezpośrednio możliwe MongoDB [1]

Jedno rozwiązanie, jeśli często korzystać z tej strony internetowej jest do zwiększania i zmniejszania pole "zliczaj" za każdym razem, gdy modyfikujesz tablicę ocen i sortujesz w tym polu.

dokument

Będziesz wyglądać następująco:

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

i kwerendy z

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

Tak, jest to jedyna opcja do tej pory, to jest stan 10gen w ich slajdach projektowych –

+0

iz nową strukturą agregacji jest to wciąż jedyna opcja? – basilboli

16

Jest już wyraźna odpowiedź, ale pomyślałem, że dodam, że można to zrobić za pomocą agregacji framework:

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