如何在mongodb中的纯json中通过Id查询文档

时间:2014-06-08 21:59:45

标签: javascript mongodb

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

  

不能规范查询:BadValue未知运算符:$ oid

任何人都知道怎么做?

1 个答案:

答案 0 :(得分:4)

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后处理为该语言所需的有效对象表示法和查询界面。

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