MongoDB |получить максимальное значение из вложенного объекта - PullRequest
0 голосов
/ 12 октября 2018
db.getCollection('post').find({'post_no':47}, {'comment': 1})

Полученные значения:

{
    "_id" : ObjectId("5bc05c038e798ccb0309658b"),
    "comment" : [ 
        {
            "comment_no" : 112
        }, 
        {
            "comment_no" : 113,
            "comment_group" : 1
        }, 
        {
            "comment_no" : 116,
            "comment_group" : 2
        }, 
        {
            "comment_no" : 117,
            "comment_group" : 3
        }, 
        {
            "comment_group" : 4,
            "comment_no" : 118
        }
    ]
}

Я хочу получить максимальное значение 4 группы комментариев.

Что я могу сделать?

Спасибовам за ваш совет.

Ответы [ 3 ]

0 голосов
/ 12 октября 2018
db.collection.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $unwind: {
                path: "$comment",

            }
        },

        // Stage 2
        {
            $sort: {
                "comment.comment_group": -1
            }
        },

        // Stage 3
        {
            $limit: 1
        },

    ]



);
0 голосов
/ 09 мая 2019

Вы можете также использовать $reduce во втором проекте в ответе Энтони Винзлета.

{
  "$project": {
    "comment": {
      '$reduce': {
        'input': '$comment',
        'initialValue': {'$arrayElemAt': ['$comment', 0]},
        'in': {
          '$cond': {
            'if': {'$gt': ['$$this.comment_group', '$$value.comment_group']},
            'then': '$$this',
            'else': '$$value'
          }
        }
      }
    }
  }
}
0 голосов
/ 12 октября 2018

Вы можете попробовать ниже агрегации

db.collection.aggregate([
  { "$project": {
    "comment": {
      "$map": {
        "input": "$comment",
        "in": {
          "comment_no": "$$this.comment_no",
          "comment_group": { "$ifNull": [ "$$this.comment_group", 0 ] }
        }
      }
    }
  }},
  { "$project": {
    "comment": {
      "$arrayElemAt": [
        "$comment",
        {
          "$indexOfArray": [
            "$comment.comment_group",
            { "$max": "$comment.comment_group" }
          ]
        }
      ]
    }
  }}
])
...