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

モンゴ:外部の重みで並べ替える方法

    与えられた配列[4,7,90,1] クエリに必要なのはこれです:

    db.collection.aggregate([
       { "$project": {
           "user_id": 1,
           "content": 1,
           "date": 1,
           "weight": { "$or": [
               { "$eq": ["$user_id": 4] }, 
               { "$eq": ["$user_id": 7] }, 
               { "$eq": ["$user_id": 90] }, 
               { "$eq": ["$user_id": 1] }, 
           ]}
       }},
       { "$sort": { "weight": -1, "date": -1 } }
    ])
    

    つまり、その$orに含まれるすべてのアイテムについてです。 条件、user_id フィールドは指定された値に対してテストされ、$eq 1を返します または0 trueの場合 またはfalse

    コードで行うことは、ビルドする配列にあるアイテムごとです。 $orの配列条件 。つまり、equals条件ごとにハッシュ構造を作成し、それを配列に渡し、それを$orの配列値としてプラグインするだけです。 状態。

    この部分がより明確になるように、前のコードから$cond演算子を除外する必要があったでしょう。

    RubyBrainのコードは次のとおりです。

    userList = [4, 7, 90, 1];
    
    orCond = [];
    
    userList.each do |userId|
      orCond.push({ '$eq' => [ 'user_id', userId ] })
    end
    
    pipeline = [
        { '$project' => {
            'user_id' => 1,
            'content' => 1,
            'date' => 1,
            'weight' => { '$or' => orCond }
        }},
        { '$sort' => { 'weight' => -1, 'date' => -1 } }
    ]
    

    個別の重みが必要で、キーと値のペアを想定する場合は、$ condでネストする必要があります:

    db.collection.aggregate([
       { "$project": {
           "user_id": 1,
           "content": 1,
           "date": 1,
           "weight": { "$cond": [
               { "$eq": ["$user_id": 4] },
               10,
               { "$cond": [ 
                   { "$eq": ["$user_id": 7] },
                   9,
                   { "$cond": [
                       { "$eq": ["$user_id": 90] },
                       7,
                       { "$cond": [
                           { "$eq": ["$user_id": 1] },
                           8, 
                           0
                       ]}
                   ]}
               ]}
           ]}
       }},
       { "$sort": { "weight": -1, "date": -1 } }
    ])
    

    これは単なる戻り値であることに注意してください。これらは順番に並んでいる必要はありません。そして、あなたはその生成について考えることができます。

    この構造を生成するには、ここを参照してください:

    https://stackoverflow.com/a/22213246/2313887




    1. 明示的に接続を閉じる必要がありますか?

    2. MongoDBの構成ファイルを作成する方法

    3. 'MongoDB3.0でソケットファイルのリンクを解除できませんでしたエラー

    4. MongoDBにはネイティブRESTインターフェースがありますか?