在Mongodb(2.6.1)中,我需要使用 pure json(不使用ObjectIds)通过_id
查询文档。正如mongodb extended json中提到的,我期待db.collection.findOne({"_id": {"$oid": "51b6eab8cd794eb62bb3e131"}})
能够正常工作,但事实并非如此。它甚至抛出以下异常。
不能规范查询:BadValue未知运算符:$ oid
任何人都知道怎么做?
答案 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有线协议所需的正确对象类型。