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

mongodbグループでフィールドを維持する

    このクエリは、あなたが求めているものに対する解決策であると私は信じています:

    db.test.aggregate([
      // Filter the docs based on your criteria
      {$match: {
        type1: {$in: ['type1A', 'type1B']},
        type2: {$in: ['type2A', 'type2B']},
        'date.year': 2015,
        'date.month': 4,
        'date.type': 'day',
        'date.day': {$gte: 4, $lte: 7}
      }},
    
      // Group by iddoc and type1 and count them
      {$group: {
        _id: { iddoc: '$iddoc', type1: '$type1' },
        sum: {$sum: 1},
        type2: { $push: '$type2' },
        year: { $first: '$date.year' },
        month: { $first: '$date.month' },
        day: { $addToSet: '$date.day' }
      }},
    
      // Sort by sum, descending
      {$sort: {sum: -1}}
    ])
    

    残りのフィールドをどのように表示するかについては、いくつかのオプションがあります。 type2を配列にプッシュすることを選択し(重複を許可)、yearの最初の値を取得します およびmonth それらは常に2015であり、一致操作ごとに4であり、addToSet 配列への日(重複は許可されません)。別のオプションは、ドキュメント全体を一致の配列にプッシュすることですが、大規模なコレクションでは注意が必要です。

    {$group: {
        _id: { iddoc: '$iddoc', type1: '$type1' },
        sum: {$sum: 1},
        matches: { $push: '$$ROOT' }
      }},
    



    1. mongodbドキュメントのリストにアイテムを挿入する

    2. Node.jsとMongoDBを使用したパスワードの保存

    3. マングースのポピュレートクエリからnull値を除外する方法

    4. Redisで最大のオブジェクトを見つける最も簡単な方法は何ですか?