Представьте себе функцию, которая находит пользователей по их имени и возвращает их.
User.aggregate(
[
{ $sort: { userFirstName: 1, userLastName: 1 } },
{
$addFields: {
firstLastName: { $concat: ['$userFirstName', ' ', '$userLastName'] },
lastFirstName: { $concat: ['$userLastName', ' ', '$userFirstName'] }
}
},
{
$match: $match // Set from above with match crit
},
{
$group: {
_id: null,
total: { $sum: 1 },
data: {
$push: {
'_id': '$_id',
'userFirstName': '$userFirstName',
'userLastName': '$userLastName',
'userProfileImage': '$userProfileImage',
'userVihorCategory': '$userVihorCategory'
}
}
}
},
{
$project: {
total: 1,
data: { $slice: ['$data', start, limit] }
}
}
]
).exec((errAgg, results) => {...
Это работает, соединяет их и возвращает их правильно.
Существует еще одна коллекция, которая отслеживает подключения пользователей.
{
user: { type: Schema.Types.ObjectId, ref: 'User' },
userConnection: { type: Schema.Types.ObjectId, ref: 'User' },
userConnectionStatus: {
type: String,
enum: ['following', 'blocked', 'requested']
}
}
Например, пользователь: я, userConnection: «кто-то», userConnectionStatus: «следующий»
Я пытаюсь вернуть еще 2 поля,
1. Мой userConnectionStatus к нему
2. Его пользовательское СоединениеСтатус ко мне
И не возвращать пользователей, которые заблокировали меня.
Каков наилучший подход, когда дело доходит до этой структуры БД.
Спасибо, что уделили время