MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mongodb:Der beste Weg, um bestimmte Dokumente zu erhalten, und dann den Rest

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/