不在mongo shell中时如何查询ObjectId

时间:2013-12-17 22:30:32

标签: mongodb shell objectid

我正在使用范围查询来处理分页功能。我在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"}

2 个答案:

答案 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');