2016-07-13 34 views
0

Ich habe eine Sammlung von Orten, die wie folgt lautet:Wie werden MongoDB-Ergebnisse nach Element im Array sortiert, das einer Bedingung entspricht?

{ 
"_id" : ObjectId("575014da6b028f07bef51d10"), 
"name" : "MooD", 
. 
. 
. 
"categories" : [ 
    { 
     "categoryList" : [Nightlife, Bar], 
     "weight" : 8 
    }, 
    { 
     "categoryList" : [Restaurant, Italian Restaurant], 
     "weight" : 4 
    } 
] 
} 

Ich mag von einer Kategorie in Orten suchen, zum Beispiel „Bar“. Also, ich schaue Kategorien Kategorie Liste, wenn es "Bar" gibt. Danach habe ich durch das Gewicht des angepassten Kategorie Gewicht sortiert werden soll, so dass die oben Ort (wo Bar Gewicht 8) erscheint vor einem anderen Ort, an dem Bar Gewicht 5.

+1

Würde eine Aggregation Arbeit in Ihrer Situation? http://stackoverflow.com/questions/13449874/how-to-sort-array-inside-collection-record-in-mongodb – JPitts

Antwort

1

Sie haben Aggregation-Framework verwenden . Check this:

db.mongo.aggregate(
    { $unwind: '$scores' }, 
    { $match: { 
     'scores.categoryList': 'Bar' 
    }}, 
    { $sort: { 
     'scores.weight': -1 
    }} 
) 
+0

Dies funktioniert. Vielen Dank für die Antwort. In Ihrer Anfrage oben, glaube ich, dass Scores Kategorien sein sollen. Das Problem ist jetzt, dass ich den Rest der Kategorien in der Antwort nicht bekommen kann. Im Beispiel meiner Frage möchte ich auch die Restaurantkategorie dieses Ortes bekommen. Hast du etwas im Sinn? Vielen Dank im Voraus. –

+0

Ich bin mir nicht sicher, ob ich verstehe Sie richtig .... Versuchen Sie diesen Code: db.mongo.aggregate ( \t {$ Projekt: {"scores.categoryList": 1, "scores.weight": 1, "_id ": 0}}, {$ Abwickler: '$ Partituren'}, {$ Abwickler: '$ scores.categoryList'}, {$ sort: { 'scores.weight': -1 }} ) –

+0

Ich empfehle Ihnen, gehen Sie auf MongoDB University (https://university.mongodb.com/) und nehmen Sie einen der Kurse. Sie sind kostenlos und sehr hilfreich. –