mongoDB查询"WHERE _id>阈值"

han*_*nsi 25 filter mongodb

我怎么能有类似SQL"... WHERE _id>阈值"的mongo查询

我试过以下,但它没有给我任何结果.

 db.things.find(_id: {$gt: someid} });
Run Code Online (Sandbox Code Playgroud)

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

_id : {"$oid" : "someid"} 
Run Code Online (Sandbox Code Playgroud)

AD7*_*six 33

比较喜欢

_idmongo中的键不是(默认情况下)一个字符串 - 它是一个mongo objectId.

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

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

不要阅读mongoexport文件

Mongo导出文件如下所示:

{ "_id" : { "$oid" : "4f876b00c56da1fa6a000030" }, ...
Run Code Online (Sandbox Code Playgroud)

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

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

id为字符串

如果您将id作为字符串,则可以:

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

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});
Run Code Online (Sandbox Code Playgroud)

  • **One Liner** : `db.things.remove({_id:{$gt:ObjectId("5981584647e32e386a96d61e")}}) ` ,可能会帮助某人。 (5认同)
  • 有用的:`var ObjectId = require('mongodb').ObjectID` (3认同)