我正在使用范围查询处理分页功能。我使用这个测试查询在蒙戈外壳:如何在不使用mongo shell的情况下查询ObjectId
> 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中可用。有没有办法指定ObjectId
作为不在shell中的查询的一部分?我已经试过以下为$lt
值没有成功:
'ObjectId("52b06166eff887999c6efbd9")'
'new ObjectId("52b06166eff887999c6efbd9")'
{"$oid" : "52b06166eff887999c6efbd9"}
感谢您的澄清。虽然我也在下面提到,我在客户端JavaScript中这样做,所以我不确定是否有适用的驱动程序... – ytran
@ytran在这种情况下,这一切都归结为请求如何碰到'mongo'外壳。从它的声音中,你可能正在做的是写一个文件并将其管入“mongo”外壳。如果是这样的话,你可以解析_id字段并用ObjectId('+ string +')替换_id字符串' –
@ytran然而,你应该小心,这很容易让MongoDB实例失效。例如,这个查询可以传递到你的webhook中:'{“$ where”:“while(1 = 1){};” }' –