在Mongodb (2.6.1)中,我需要使用纯json (不使用_id )查询文档。正如在mongodb扩展json中提到的,我希望db.collection.findOne({"_id": {"$oid": "51b6eab8cd794eb62bb3e131"}})能够工作,但它没有工作。它甚至会引发以下异常。
无法规范化查询: BadValue未知操作符:$oid
有人知道怎么做吗?
发布于 2014-06-09 01:43:31
扩展JSON语法是一种“传输”格式,因此如果您向远程客户端发送JSON,仍然可以确定实际实现的类型,如ObjectId、日期、二进制等。
实现此功能的惟一位置是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字段提供的"string“值执行类似的”强制转换“,以便将其转换为BSON线路协议所需的正确对象类型。
https://stackoverflow.com/questions/24111273
复制相似问题