#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
случае выдает ошибки.