node.js - 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"
},
解决方案
由于您使用的是该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'
。我已经在上面的函数中更新了它。
推荐阅读
- angular - 基于drop container的不同cdk-drag-preview动画
- c++ - 为什么 CMake 无法链接 Libbitcoin C++?
- elasticsearch - 在 ElasticSearch 中查询动态对象类型
- python - 表单数据未将数据保存到数据库 - Django
- swift - '不安全指针
' 不能转换为 'UnsafePointer<_> - python - 如何打印特定键:腌制字典中的值对
- c++ - 在 4 sum 问题中查找代码失败的测试用例
- maven - 使用 alfresco sdk 的空 maven 项目
- html - 包含图像和文本的子 div 有高度,但父 div 没有
- python - 在 HTTP 请求的哪个部分,协议会卡住?