0

mongodb の ObjectID を使用して、特定のコレクションの挿入時に範囲クエリを実行しようとしています。このブログエントリを除いて、これが可能であるというドキュメントを実際に見つけることができません: http://mongotips.com/b/a-few-objectid-tricks/

特定のタイムスタンプの後に作成されたすべてのドキュメントを取得したいと考えています。nodejsドライバーを使用すると、これが私が持っているものです:

var timeId = ObjectId.createFromTime(timestamp);
var query = {
    localUser: userId,
    _id: {$gte: timeId}
};
var cursor = collection.find(query).sort({_id: 1});

タイムスタンプに関係なく、常に同じ量のレコード (27 のコレクションで 19) を取得します。createFromTime は時間に関連するオブジェクト ID のバイトのみを埋め、他のバイトは 0 のままであることに気付きました (このように: 4f6198be0000000000000000)。

これに ObjectID を使用しようとする理由は、ドキュメントをノードの mongodb ドライバーに渡すときではなく、mongodb サーバーにドキュメントを挿入するときにタイムスタンプが必要だからです。

誰かがこれを機能させる方法を知っていますか、またはmongodbサーバーで生成された挿入時間を生成してクエリする方法を別のアイデアを持っていますか?

4

1 に答える 1

0

ruby の nodejs ドライバーについてよくわからない場合は、このような範囲クエリを適用するだけです。

jan_id = BSON::ObjectId.from_time(Time.utc(2012, 1, 1))       

feb_id = BSON::ObjectId.from_time(Time.utc(2012, 2, 1)) 

@users.find({'_id' => {'$gte' => jan_id, '$lt' => feb_id}})

var timeId = ObjectId.createFromTime(timestamp)ObjectId を作成していることを確認して ください。

また、localuserなしでクエリを試してください

于 2012-06-25T15:40:46.340 に答える