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

行をMongoDBの列にピボットします

    これで、新しい集計演算子$arrayToObjectを利用してMongoDBキーをピボットできます。この演算子は、MongoDB v3.4.4 +

    で使用できます。

    たとえば、次のデータの例を考えます。

    db.foo.insert({ provider: "Facebook", timestamp: '1371798000000', name: 'page_storytellers', value: 20871})
    db.foo.insert({ provider: "Facebook", timestamp: '1371798000000', name: 'page_fans', value: 1291509})
    db.foo.insert({ provider: "Facebook", timestamp: '1371798000000', name: 'page_fan_adds', value: 2829})
    db.foo.insert({ provider: "Google", timestamp: '1371798000000', name: 'page_fan_adds', value: 1000})
    

    以下の集約パイプラインを利用できます:

    db.foo.aggregate([
      {$group:
         {_id:{provider:"$provider", timestamp:"$timestamp"}, 
          items:{$addToSet:{name:"$name",value:"$value"}}}
      }, 
      {$project:
         {tmp:{$arrayToObject: 
           {$zip:{inputs:["$items.name", "$items.value"]}}}}
      }, 
      {$addFields:
         {"tmp.provider":"$_id.provider", 
          "tmp.timestamp":"$_id.timestamp"}
      }, 
      {$replaceRoot:{newRoot:"$tmp"}
      }
    ]);
    

    出力は次のようになります:

    {
      "page_fan_adds": 1000,
      "provider": "Google",
      "timestamp": "1371798000000"
    },
    {
      "page_fan_adds": 2829,
      "page_fans": 1291509,
      "page_storytellers": 20871,
      "provider": "Facebook",
      "timestamp": "1371798000000"
    }
    

    $ group、$ project、$ addFields、$ zip、および$ replaceRoot

    も参照してください。

    1. RuntimeError:-ERR不明なコマンドがRubyでredisgemを実行しています

    2. Kerasはセロリタスク内に戻らないと予測しています

    3. 誰かがredissetbitコマンドを説明できますか?

    4. RedisSCANマッチング