Использование elemMatch для возврата одного объекта из массива node.js - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь запросить сбор данных, чтобы вернуть только один объект из массива объектов, используя elemMatch.У меня есть эти данные:

[
{
    "_id": "5ba10e24e1e9f4062801ddeb",
    "user": {
        "_id": "5b9b9097650c3414ac96bacc",
        "firstName": "blah",
        "lastName": "blah blah",
        "email": "blah@gmail.com"
    },
    "appointments": [
        {
            "date": "2018-09-18T14:39:36.949Z",
            "_id": "5ba10e28e1e9f4062801dded",
            "treatment": "LVL",
            "cost": 30
        },
        {
            "date": "2018-09-18T14:39:32.314Z",
            "_id": "5ba10e24e1e9f4062801ddec",
            "treatment": "LVL",
            "cost": 30
        }
    ],
    "__v": 1
}
]

Мне нужно запросить базу данных и вытащить только одну встречу в зависимости от идентификатора, переданного в params.Я использую код ниже, основанный на документах здесь .

router.get(
 "/booked/:app_id",
 passport.authenticate("jwt", { session: false }),
 (req, res) => {
  Appointment.find()
  .elemMatch("appointments", { id: req.params.app_id })
  .then(app => res.json(app));
 }
);

Это возвращает пустой массив, хотя, когда я тестирую с почтальоном.Это первый раз, когда я использовал node.js и mongoDB, поэтому любая помощь будет принята с благодарностью.Спасибо.

1 Ответ

0 голосов
/ 21 сентября 2018

Вы используете elemmatch в качестве оператора запроса , но вам необходимо использовать его в качестве оператора проецирования

Измените свою функцию следующим образом:

Appointment.find(
  {"appointments": {$elemMatch: {_id: req.params.app_id }}},
  {"appointments": {$elemMatch: {_id: req.params.app_id }}}
)

Почему дважды ??

Первый объект в параметре запроса поиска - оператор запроса $ elemmatch .Он вернет все документы, в которых есть хотя бы одна запись, соответствующая _id в массиве встреч.(но вернет целые документы)

Второй (тот же объект) - оператор проекции elemmatch , который 'фильтрует' массив встреч и возвращает только первый соответствующий элемент вмассив.

PS: не может проверить эту команду.Попробуйте на своей стороне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...