Я хотел бы получить пользователя из базы данных.Моя функция принимает requesterId
, который является идентификатором пользователя, запрашивающего эти данные, и targetId
, который является пользователем для извлечения.
Если запрашивающий объект находится в массиве friends
цели (строки), поле phone
должно быть включено в проекцию.Если нет, то это исключено.
Я прочитал следующий запрос после прочтения примера здесь .Однако поле phone
всегда возвращается независимо от того, что.Что я делаю не так?
getUser: function getUser(requesterId, targetId) {
return db.collection('users').aggregate([
{$match: {userId: targetId}},
{
$project:
{
firstName: 1,
phone: {
$cond: {
if: {friends: requesterId},
then: "$phone",
else: "$$REMOVE"
}
}
}
},
{$limit: 1}
]).toArray();
}
Схема (создана в Компасе без кода):
userId
- Строка
firstName
- Строка
friends
- Array (String)
phone
- String
Индексы : Нет в этой коллекции
Пример:
/* Bob's MongoDB data */ {userId: "BobID", firstName: "Bob", friends: ["AmyID"], phone: "1234567890"}
getUser(requesterId = 'AmyID', targetId = 'BobID');
/* Result */ {firstName: "Bob", phone: "1234567890"}
/* Amy's MongoDB data */ {userId: "AmyID", firstName: "Amy", friends: ["CassieID"], phone: "9876543210"}
getUser(requesterId = 'BobID', targetId = 'AmyID');
/* Result */ {firstName: "Amy", phone: "987654321"}
Запрос Боба на пользователя Эми не должен возвращать ее номер телефона, поскольку он отсутствует в ее массиве friends
.