Nun, hier gibt es nicht viele Details, aber ich kann einen Beispielfall zur Prüfung geben. Betrachten Sie die folgenden Dokumente:
{ "user" : "fred", "color" : "black" }
{ "user" : "bill", "color" : "blue" }
{ "user" : "ted", "color" : "red" }
{ "user" : "ted", "color" : "black" }
{ "user" : "fred", "color" : "blue" }
{ "user" : "bill", "color" : "red" }
{ "user" : "bill", "color" : "orange" }
{ "user" : "fred", "color" : "orange" }
{ "user" : "ted", "color" : "orange" }
{ "user" : "ally", "color" : "orange" }
{ "user" : "alice", "color" : "orange" }
{ "user" : "alice", "color" : "red" }
{ "user" : "bill", "color" : "purple" }
Angenommen, Sie möchten Blasen die Einträge für die Benutzer "bill" und "ted" oben in Ihren Ergebnissen, dann alles andere sortiert nach user
und die color
. Was Sie tun können, ist, die Dokumente durch ein $project
laufen zu lassen insgesamt wie folgt:
db.bubble.aggregate([
// Project selects the fields to show, and we add a weight value
{$project: {
_id: 0,
"user": 1,
"color": 1,
"weight": {$cond:[
{$or: [
{$eq: ["$user","bill"]},
{$eq: ["$user","ted"]}
]},
1,
0
]}
}},
// Then sort the results with the `weight` first, then `user` and `color`
{$sort: { weight: -1, user: 1, color: 1 }}
])
Das bedeutet also, weight
bedingt einen Wert zuzuweisen basierend darauf, ob der user
mit einem der erforderlichen Werte abgeglichen wurde. Dokumente, die nicht übereinstimmen, erhalten einfach eine 0
Wert.
Wenn wir diese geändert verschieben Dokument auf $sort
Phase, das neue weight
Taste kann verwendet werden, um die Ergebnisse so anzuordnen, dass die "gewichteten" Dokumente oben sind und alles andere dann folgt.
Es gibt einige Dinge, die Sie mit $project tun können ein Gewicht auf diese Weise. Weitere Informationen finden Sie in der Operatorreferenz:
http://docs.mongodb.org/manual/reference/operator/aggregation/