sql >> データベース >  >> NoSQL >> MongoDB

mongodb:特定のドキュメントを取得してから残りを取得するための最良の方法

    ここでは詳細はあまりありませんが、検討のためにサンプルケースを提供できます。次の一連のドキュメントを検討してください。

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

    したがって、バブルしたいとします。 ユーザーのアイテムは結果の一番上に「請求」および「テッド」され、それ以外はすべてuserで並べ替えられます とcolor 。できることは、 $project を介してドキュメントを実行することです。 次のように、全体としてステージングします。

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

    つまり、条件付きでweightに値を割り当てます。 userかどうかに基づく 必要な値の1つに一致しました。一致しないドキュメントには、単に0が与えられます 価値。

    これを変更移動すると $sort にドキュメントを追加します フェーズ、新しいweight キーを使用して結果を並べ替えることができるため、「重み付けされた」ドキュメントが一番上に表示され、それ以外のものが続きます。

    $project に対してできることはたくさんあります。 このように重み。詳細については、オペレーターリファレンスを参照してください:

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




    1. UbuntuのGolangにあるMongoCloudmongodbデータベースに接続できません

    2. MongoDBレプリカセット用にSELinuxを設定する方法

    3. MongoDB:フィールドのクエリ

    4. rmongodb認証は常に失敗します