29

我怎样才能有一个类似于 SQL “...WHERE _id > threshold”的 mongo 查询

我尝试了以下,但它没有给我任何结果。

 db.things.find(_id: {$gt: someid} });

是不是因为 _id 字段有点特殊,因为它有格式?

_id : {"$oid" : "someid"} 
4

1 回答 1

40

比较喜欢和喜欢

mongo 中的_id键不是(默认情况下)字符串 - 它是 mongo objectId。

您需要与相同的类型进行比较才能获得有意义的结果:

var ObjectId = require('mongodb').ObjectID;
var oid = new ObjectId();
db.things.find(_id: {$gt: oid});

不要阅读 mongoexport 文件

Mongo 导出文件如下所示:

{ "_id" : { "$oid" : "4f876b00c56da1fa6a000030" }, ...

这是对象 ID 的 json 表示。Mongo 不希望您在实际查询数据库时使用这种语法。这将不起作用:

# will not work
db.things.find("_id.$oid": {$gt: "string"});

id 作为字符串

如果您将 id 作为字符串,您将执行以下操作:

var ObjectId = require('mongodb').ObjectID;
var str = "123456789012345678901234";
var oid = new ObjectId(str);
db.things.find(_id: {$gt: oid});

id 作为部分字符串

如果您拥有的字符串不是有效的 oid(不是 24 个字符长),您只会从 mongo 获得一个异常 - 或者取决于您的驱动程序,一个新的 oid。如果您有部分对象 id,您可以用 0 填充以生成有效的 oid,因此允许通过部分对象 id 进行查找。例如:

var ObjectId = require('mongodb').ObjectID;
var oid = new ObjectId(str + "0000");
db.things.find(_id: {$gt: oid});
于 2012-06-15T14:15:01.423 回答