0

我正在使用范围查询开发分页功能。我在 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 内部可用。ObjectId当不在 shell 中时,有没有办法将 an 指定为查询的一部分?我尝试了以下作为$lt没有成功的值:

'ObjectId("52b06166eff887999c6efbd9")'
'new ObjectId("52b06166eff887999c6efbd9")'
{"$oid" : "52b06166eff887999c6efbd9"}
4

2 回答 2

1

您在最后一个示例中所做的是将您的 objectId 作为字符串(前两个示例)或作为字典第三个示例传递。所以肯定是行不通的。

你可以只传递一个字符串' 52b06166eff887999c6efbd9'作为参数,然后当你收到它时,你可以ObjectId在服务器上正常构造。例如在 php 中,您可以通过以下方式构造它new MongoId('your string');

于 2013-12-17T22:38:02.420 回答
1

一般来说,这种抽象由您使用的任何 MongoDB 驱动程序处理。如果您使用的是实际驱动程序,则可以在_id不使用的情况下进行查询ObjectId()

Mongoose / Node.js 示例:

People.find({ _id : "Valid ObjectID String" }, function(e, person) {
  console.log(e, person);
});

如果您仍然需要ObjectId帮助程序,通常您可以在所需的任何本机驱动程序中引用它。

于 2013-12-17T22:34:47.840 回答