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

計算された条件でのMongoソート

    特定の基準で結果を「重み付け」する場合、または「ソート」内に何らかの「計算値」を含める場合は、.aggregate()が必要です。 代わりにメソッド。これにより、「投影された」値を $sortで使用できるようになります ドキュメント内の現在のフィールドのみを使用できる操作:

    db.messages.aggregate([
        { "$match": { "messages": userId } },
        { "$project": {
            "recipients": 1,
            "unread": 1,
            "content": 1,
            "readYet": {
                "$setIsSubset": [ [userId], "$unread" ] }
            }
        }},
        { "$sort": { "readYet": -1 } },
        { "$limit": 20 }
    ])
    

    ここで$setIsSubset 演算子を使用すると、「未読」配列を[userId]の変換された配列と比較できます。 一致するものがあるかどうかを確認します。結果はtrueになります userIdが存在する場所またはfalse そうでないところ。

    次に、これを$sortに渡すことができます 、一致を優先して結果を並べ替えます(降順の並べ替えはtrueです 上に)、最後に$limit 指定された量までの結果を返すだけです。

    したがって、「並べ替え」に計算された用語を使用するには、値をドキュメントに「投影」して、並べ替えることができるようにする必要があります。集約フレームワークは、これを行う方法です。

    $elemMatchにも注意してください 配列内の単一の値を照合するためだけに必要なわけではなく、値を直接指定するだけで済みます。その目的は、単一の配列要素で「複数の」条件が満たされる必要がある場合ですが、もちろんここでは適用されません。




    1. AzureのパフォーマンスベンチマークでのRedis–Redis™とAzureキャッシュのScaleGrid

    2. mongodbのISODateを使用した日付クエリが機能していないようです

    3. Laravel-特定の文字列を含むすべてのキャッシュ/Redisキーを消去します

    4. Sidekiqがキューを処理していません