【问题标题】:How to pass mongodb ObjectId() in HTTP request JSON body?如何在 HTTP 请求 JSON 正文中传递 mongodb ObjectId()?
【发布时间】: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

整个请求正文用作查询。

【问题讨论】:

    标签: json node.js mongodb rest express


    【解决方案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/ 问题是如何使服务器端代码尽可能通用和干净。
    猜你喜欢
    • 2021-04-11
    • 2023-04-09
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多