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 がある場合は、有効な oid を作成するために 0 をパディングして、部分的なオブジェクト ID による検索を許可できます。例えば:
var ObjectId = require('mongodb').ObjectID;
var oid = new ObjectId(str + "0000");
db.things.find(_id: {$gt: oid});