如何让mongo查询类似于SQL“... WHERE _id> threshold”
我尝试了以下内容,但它没有给我任何结果。
db.things.find(_id: {$gt: someid} });
是因为_id字段有点特殊,因为它的格式为?
_id : {"$oid" : "someid"}
答案 0 :(得分:33)
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进行查找。 e.g:
var ObjectId = require('mongodb').ObjectID;
var oid = new ObjectId(str + "0000");
db.things.find(_id: {$gt: oid});