javascript - 如何在mongodb中通过纯js​​on中的Id查询文档

标签 javascript mongodb

在 Mongodb (2.6.1) 中,我需要使用 pure json(不使用 ObjectIds)通过 _id 查询文档。正如 mongodb extended json 中提到的,我期待 db.collection.findOne({"_id": {"$oid": "51b6eab8cd794eb62bb3e131"}}) 工作,但事实并非如此。它甚至抛出以下异常。

Can't canonicalize query: BadValue unknown operator: $oid

有人知道怎么做吗?

最佳答案

extended JSON语法旨在作为“传输”格式,因此,例如,如果您将 JSON 输出发送到远程客户端,仍然有一种方法可以确定实际实现的类型,例如 ObjectId、Date、Binary 等。

AFIAK 实现此功能的唯一位置是在 C# 驱动程序中,该驱动程序提供了一个 json 解析器实用方法,该方法将采用带有扩展语法字段的 JSON,然后将它们“转换”为所需类型的对象。

因此,您可以以大致相同的方式实现自己的解析器例程来执行相同的操作,只需测试表示键中指定的对象类型的键值即可。给定一个示例片段:

{ "_id": { "$oid": "51b6eab8cd794eb62bb3e131" } }

采用简化形式,无需按深度递归检查:

data = JSON.parse( json );

for ( k in data ) {
    if ( data[k].hasOwnProperty("$oid") )
        data[k] = new ObjectId( data[k]["$oid"] );
    // etc
}

因此,仅仅因为您可能使用 JavaScript,并不意味着“扩展语法”作为查询源是有效的,但您可以与其他语言一样,将解析后的 JSON 后处理为该语言所需的有效对象表示法以及查询接口(interface)。

某些驱动程序对针对 _id 字段提供的“字符串”值执行类似的“转换”,以便转换为 BSON 有线协议(protocol)所需的正确对象类型。

关于javascript - 如何在mongodb中通过纯js​​on中的Id查询文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24111273/

相关文章:

mongodb - 在列表中显示mongo中的相应字段

javascript - template.data._id 在 Meteor 中做什么?

javascript - $ 未在 JQuery 中定义

javascript - 当我们在 JavaScript 中将字符串变量初始化为 null 或空字符串时,有什么区别?哪个是首选

mongodb - Mongo DB 结果接口(interface)到 Golang 中的结构转换

python - 插入到 pymongo 集合时,“str”对象不支持项目分配

node.js - MongoClient 第一次连接时无法连接到服务器,但稍后会连接

javascript - 尝试访问原型(prototype)方法中的成员变量

javascript - 将 ajax 文件中的 PHP 对象返回到我的 javascript 代码

javascript - 使用 Javascript 将一个类中的所有图像替换为另一个图像