我正在使用范围查询来处理分页功能。我在mongo shell中使用此测试查询:
> var params = {$query: {_id: {$lt: ObjectId("52b06166eff887999c6efbd9")}}, $orderby: {_id: -1}, $maxScan: 3}
> params
{
"$query" : {
"_id" : {
"$lt" : ObjectId("52b06166eff887999c6efbd9")
}
},
"$orderby" : {
"_id" : -1
},
"$maxScan" : 3
}
> db.events.find(params)
我希望能够将序列化的params对象传递给Web服务(作为URL查询字符串)。但是,ObjectId
类仅在shell中可用。有没有办法在不在shell中时将ObjectId
指定为查询的一部分?我已尝试将以下内容作为$lt
的值,但没有成功:
'ObjectId("52b06166eff887999c6efbd9")'
'new ObjectId("52b06166eff887999c6efbd9")'
{"$oid" : "52b06166eff887999c6efbd9"}
答案 0 :(得分:1)
一般来说,这个抽象是由您使用的任何MongoDB驱动程序处理的。如果您使用的是实际的驱动程序,则无需使用_id
ObjectId()
进行查询
Mongoose / Node.js示例:
People.find({ _id : "Valid ObjectID String" }, function(e, person) {
console.log(e, person);
});
如果您仍然需要ObjectId
帮助程序,通常您可以在任何您需要的本机驱动程序中引用它。
答案 1 :(得分:1)
您在上一个示例中所做的是将objectId作为字符串(前两个示例)或作为字典第三个示例传递。所以肯定它不起作用。
您只能传递一个字符串“52b06166eff887999c6efbd9
”作为参数,然后当您收到它时,您可以在服务器上构建正常的ObjectId
。例如,在php中,您可以按照以下方式构建它new MongoId('your string');