如何在 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 对象映射请求

如何使用JSON正文在REST API POST方法中传递多个记录

如何在 Flutter 中使用 JSON 正文发出 http DELETE 请求?