Получить пять лучших максимальных результатов на основе вложенного документа mongoose?

#node.js #mongodb #express #mongoose

#node.js #mongodb #экспресс #mongoose

Вопрос:

я новичок в mongo db и имею некоторые базовые знания о mongo. у меня есть коллекция альбомов, показанных ниже

    { 
    "_id" : ObjectId("5f9ff607562cdb1c5c2acb26"), 
    "title" : "neelum velley album", 
    "image" : [
        {
            "_id" : ObjectId("5f9ff812558b1b3988b75707"), 
            "imageName" : "neelum4-2020-11-02T12-05-25.931Z.jpg"
        }
    ], 
    "description" : "neelum vally test album", 
    "categories" : ObjectId("5f65c287efa64e10f6090bba"), 
    "user" : ObjectId("5f93d8571240934378d5ba06"), 
    "isDeleted" : false, 
    "isActive" : true, 
    "createdDate" : "2020-11-02T12:05:27.264Z", 
    "updateDate" : "2020-11-02T12:14:10.928Z", 
    "__v" : NumberInt(0), 
    "likes" : [
        "5f93d8571240934378d5ba06", 
        "5f33b6c4c06993306c21279b", 
        "5f9a53138dca473d58ae6e39", 
        "5fae72d86525194c0077edd8"
    ], 
    "comments" : [

    ]
}
{ 
    "_id" : ObjectId("5fa26899ccd6e2926814d72d"), 
    "title" : "This is testing title", 
    "image" : [
        {
            "_id" : ObjectId("5f9ff812558b1b3988b75704"), 
            "imageName" : "neelum1-2020-11-02T12-05-25.901Z.jpg"
        }, 
        {
            "_id" : ObjectId("5f9ff812558b1b3988b75705"), 
            "imageName" : "neelum2-2020-11-02T12-05-25.910Z.jpg"
        }
    ], 
    "likes" : [
        "5f9a53138dca473d58ae6e39", 
        "5fae72d86525194c0077edd8", 
        "5f65ed4552e1d9156af84bd8"
    ], 
    "comments" : [

    ], 
    "description" : "neelum vally test album", 
    "categories" : ObjectId("5f65c287efa64e10f6090bba"), 
    "user" : ObjectId("5f93d8571240934378d5ba06"), 
    "isDeleted" : false, 
    "isActive" : true, 
    "createdDate" : "2020-11-02T12:05:27.264Z", 
    "updateDate" : "2020-11-02T12:14:10.928Z", 
    "__v" : NumberInt(0)
}
}
 

в каждом альбоме у меня есть массив «лайков», и каждый массив лайков содержит идентификаторы пользователей, которым нравится альбом. Как показано в приведенной выше коллекции
, я хочу получить пять лучших альбомов с максимальным количеством лайков. пожалуйста, какие-либо решения?
заранее спасибо

Ответ №1:

Сделайте это:

 db.albums.aggregate(
{$addFields:{totalLikes:{$cond:[{$isArray:"$likes"}, {$size:"$likes"}, null}]}},
{$sort:{totalLikes:1}}, 
{$limit:5}}
)
 

Если вы не хотите видеть поле «общее количество лайков», его можно удалить после добавления лимита: {$unset:"$totalLikes"}

Кодирование проверяет, что поле является массивом, в противном $size случае выдает ошибки.