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 がある場合は、有効な oid を作成するために 0 をパディングして、部分的なオブジェクト ID による検索を許可できます。例えば:

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