我怎样才能有一个类似于 SQL “...WHERE _id > threshold”的 mongo 查询
我尝试了以下,但它没有给我任何结果。
db.things.find(_id: {$gt: someid} });
是不是因为 _id 字段有点特殊,因为它有格式?
_id : {"$oid" : "someid"}
mongo 中的_id
键不是(默认情况下)字符串 - 它是 mongo objectId。
您需要与相同的类型进行比较才能获得有意义的结果:
var ObjectId = require('mongodb').ObjectID;
var oid = new ObjectId();
db.things.find(_id: {$gt: oid});
Mongo 导出文件如下所示:
{ "_id" : { "$oid" : "4f876b00c56da1fa6a000030" }, ...
这是对象 ID 的 json 表示。Mongo 不希望您在实际查询数据库时使用这种语法。这将不起作用:
# will not work
db.things.find("_id.$oid": {$gt: "string"});
如果您将 id 作为字符串,您将执行以下操作:
var ObjectId = require('mongodb').ObjectID;
var str = "123456789012345678901234";
var oid = new ObjectId(str);
db.things.find(_id: {$gt: oid});
如果您拥有的字符串不是有效的 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});