MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb:meilleur moyen d'obtenir des documents spécifiques, puis le reste

Eh bien, il n'y a pas beaucoup de détails ici, mais je peux donner un exemple de cas à prendre en considération. Considérez l'ensemble de documents suivant :

{ "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" }

Supposons donc que vous vouliez buller les éléments pour les utilisateurs "bill" et "ted" en haut de vos résultats, puis tout le reste trié par user et la color . Ce que vous pouvez faire est d'exécuter les documents via un $project étape dans l'ensemble, comme suit :

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 }}

])

Donc, ce que cela fait, c'est attribuer conditionnellement une valeur à weight selon que l'user correspondait à l'une des valeurs requises. Les documents qui ne correspondent pas reçoivent simplement un 0 valeur.

Lorsque nous déplaçons ce modifié document sur le $sort phase, le nouveau weight La clé peut être utilisée pour ordonner les résultats afin que les documents "pondérés" soient au-dessus, et tout le reste suivra ensuite.

Il y a pas mal de choses que vous pouvez faire pour $project un poids de cette façon. Consultez la référence de l'opérateur pour plus d'informations :

http://docs.mongodb.org/manual/reference/operator/aggregation/