首页 > 解决方案 > NodeJs MongoDB如何发出复杂的GET请求

问题描述

我正在编写一个节点 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"
        },

标签: node.jsmongodbexpressmongoose

解决方案


由于您使用的是该GET方法,因此 的值req.body将是{}对象。

这就是为什么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'。我已经在上面的函数中更新了它。


推荐阅读