如何在 HTTP 请求 JSON 正文中传递 mongodb ObjectId()?
Posted
技术标签:
【中文标题】如何在 HTTP 请求 JSON 正文中传递 mongodb ObjectId()?【英文标题】:How to pass mongodb ObjectId() in HTTP request JSON body? 【发布时间】:2016-10-18 01:36:55 【问题描述】:我需要在 JSON 类型的请求正文中发送一个 mongo 查询,例如:
_id : $gt : ObjectId("575d0c22964ddb3b6ba41bed")
(获取晚于 id'ed 记录插入的记录)
在节点服务器端,我使用 body-parser 中间件表示。除非所有内容都被引用,否则它不会解析请求正文 JSON。例如。以上必须是这样的:
"_id" : "$gt" : "ObjectId(\"575d0c22964ddb3b6ba41bed\")"
db 使用所有引号运行查询并且不返回任何内容。
如何将ObjectId()
作为函数传递给mongodb
而无需重新解析整个请求正文并去掉引号?
我正在 Chrome 中使用邮递员扩展程序进行测试,并将请求发送到 REST url: /api/:obj_type/list
。
整个请求正文用作查询。
【问题讨论】:
【参考方案1】:您只会在客户端和服务器中传递字符串值,直到向数据库发出请求,此时您将使其成为具有相同值的新 ObjectID 以传递到数据库中。传递字符串要容易一些,因为所有客户端/服务器都知道如何处理字符串与 ObjectID - 在 URL 中传递 ObjectID 也是一个问题。 - 回答您关于如何在不重新解析的情况下将 ObjectID() 传递给 Monogdb 的问题。你真的不会,除非我误解了上下文
但是将 ID 作为字符串传递,因此它类似于 var stringId = "507f1f77bcf86cd799439011"
,当您要进行查询时,您会按照 col.find(_id: new ObjectId(stringId)).toArray(function(err,results));
的方式执行一些操作
【讨论】:
谢谢@Andrei M。我已经有一个路由定义 app/api/:obj_type/read/:id 处理通过 id 获取一个。在这里,我试图将请求正文中的复杂查询传递给更通用的路径:app/api/:obj_type/ 问题是如何使服务器端代码尽可能通用和干净。以上是关于如何在 HTTP 请求 JSON 正文中传递 mongodb ObjectId()?的主要内容,如果未能解决你的问题,请参考以下文章
在单个 HTTP POST 请求中同时传递文件资源和 json 正文
如何延迟读取触发 HTTP 请求的正文,直到稍后在 Azure 函数中?
如何在 moya 中通过 POST 请求传递 JSON 正文
在其 HTTP 正文中嵌套 JSON 的 RestKit 对象映射请求