NodeJs MongoDB, как сделать сложный запрос на получение - PullRequest
1 голос
/ 29 мая 2020

привет, я пишу node js метод, который я хочу найти поля, параметры которых imei.name переданы в ссылке, а тестовое поле пусто, это метод, который я пытался использовать

 router.get('/gettdata/', (req, res, next) => {

        let aa=req.query.imei;
        console.log(aa);
        Post.findOne( {imei:{"imei.name":req.body},
      test:{$exists:false}
      }


        )
          .then((posts) => {
            res.json(posts);
            console.log(posts);
          })
          .catch(err => console.log(err))
      });

он возвращает пустое поле, несмотря на то, что оно существует, когда я использую только

Post.findOne( {"imei.name":req.body})

, он работает, а когда я использую только

Post.findOne( 
  test:{$exists:false}
 ) 

, он работает, но проблема заключается в использовании их два в одном время

{
        "_id" : ObjectId("5eb7f90fb88d8d4d94184333"),
        "imei" : {
                "name" : "bokhhjbr",
                "modele" : "5486"
        },
        "__v" : 0
}
{
        "_id" : ObjectId("5eb7fb9cb88d8d4d94184334"),
        "imei" : {
                "name" : "865566048694354",
                "modele" : "CPH1803"
        },
        "__v" : 0
}
{
        "_id" : ObjectId("5eba73395fd8dd073065efdf"),
        "imei" : {
                "name" : "bok55555555555hjbr",
                "modele" : "5486"
        },
        "createdAt" : ISODate("2020-05-12T09:58:17.203Z"),
        "updatedAt" : ISODate("2020-05-12T09:58:17.203Z"),
        "__v" : 0
}
{
        "_id" : ObjectId("5ed0f93c0c93ec1c785358ab"),
        "imei" : {
                "name" : "865566048694354"
        },
        "test" : {
                "tactileState" : "1",
                "pixelState" : "1",
                "greyState" : "1"
        },

1 Ответ

0 голосов
/ 29 мая 2020

Так как вы используете метод GET, значение req.body будет {} object.

Вот почему Post.findOne( {"imei.name":req.body}) возвращает null

Вы либо передаете параметр как параметры запроса или параметры запроса. Если вы передаете его как параметры запроса, тогда вызов GET будет выглядеть как

http://localhost:3000/post/gettdata?name=865566048694354

Теперь вы можете получить доступ к имени в своем методе, например,

router.get("/gettdata", (req, res) => {
  let name = req.query.name;
  Post.findOne({'imei.name': name, test: { $exists: false } })
    .then((posts) => {
      res.json(posts);
      console.log(posts);
    })
    .catch(err => {
      console.log(err)
      res.status(500).json({ message: "Error" })
  });
});

Кроме того, возникла проблема в синтаксис для запроса вложенного объекта должен указывать поле и вложенное поле в точечной нотации 'field.nestedField'. Я обновил его в вышеуказанной функции.

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