【发布时间】:2015-05-08 07:12:32
【问题描述】:
我正在使用 python、tornadoweb 和 MongoDB 构建一个 REST api。 我正在寻找一种简单的方法来处理客户端-服务器文档交换,并尽可能使用最少的操作和最简单的 API。我在将 MongoDB 的 ObjectId 序列化和反序列化为 JSON 以向客户端发送/接收数据时遇到问题。
我知道有两种方法可以解决这个问题:
- 通过 SONManipulators (Configure pymongo to use string _id instead of ObjectId) 将 MongoDB 配置为使用字符串 _id 字段而不是 ObjectId
- 使用json_utils模块将ObjectId转换为json字符串
{"$oid": "..."}(Unable to deserialize PyMongo ObjectId from JSON)
这些解决方案似乎都不可接受,因为:
- MongoDB 使用 ObjectIds 而不是字符串是有原因的(参见:MongoDb: Benefit of using ObjectID vs a string containing an Id?)
-
如果服务器发送一个语法为
{"$oid": "..."}的文档的id,当客户端不做任何修改地返回这个id时,tornado的get_argument函数不能正确处理它接收到的数据:> arguments: {'_id[$oid]': ['54f9c7ab834bac1b76846655'], ...} > POST [...] (127.0.0.1): Missing argument _id
知道如何优雅地处理这个问题吗?优雅地我的意思是我想以最类似于如果 id 是一个简单的字符串的方式来处理 id。
非常感谢您的帮助。我做了一些研究,很惊讶我找不到这个问题的答案,因为 MondoDB 和 tornado 经常一起使用。也许我错过了一个关键字来获得解决方案。
【问题讨论】:
-
另一种回答问题的方法是:如何避免jQuery的AJAX调用将对象
{obj: {field: 'value'}}序列化为{"obj[field]": "value"}
标签: jquery python mongodb tornado pymongo