В Mongoose, как вы генерируете новое поле со значением, равным длине массива другого поля?
У меня есть простая база данных с коллекцией пользователей. Вот как выглядит документ:
{
username: "Joe",
age: 20,
friends: ["u2", "u5", "u6", "u7", "u11"]
}
Я хочу создать запрос, который будет возвращать что-то похожее
{
username: "Joe",
age: 20,
total_friends: 5,
friends: ["u2", "u5", "u6"]
}
обратите внимание, что я нарезал только первых 3 друзей, так как я не хочу возвращать всех друзей пользователей в каждом запросе.
Как я могу создать total_friends
поле перед нарезкой?
Вот что у меня так далеко:
UserModel.findById( new Types.ObjectId(userId))
// what goes here??
.slice('friends', 3)
.populate('friends')
.exec((err, doc) => {...});
1 ответ
Решение
Вы можете использовать структуру агрегации. Попробуй это:
db.userModel.aggregate([
{
$addFields: {
total_friends: { $size: "$friends" },
friends: { $slice: [ "$friends", 3 ] }
}
}
])
Поскольку 5-элементный массив является входом для стадии конвейера, $size вернет 5 элементов, а $slice будет работать с 5-элементным массивом, принимая первые три.