0

C ドライバーを使用して、mongo のテーラブル カーソルを実装しようとしています。今まで、次のコードを使用して、それを作成し、プッシュされたデータをプロセスに正常に取得できました

cursor =mongo_find( connection, DB_TENANT_NAMESPACE, query, bson_empty( &e ), 0, 0, MONGO_TAILABLE | MONGO_AWAIT_DATA);
while(1)
{
    while(mongo_cursor_next(cursor) == MONGO_OK)
    {
       b=mongo_cursor_bson(cursor);
      if(bson_find(iterator,b,"_id"))
      {
        oid =bson_iterator_oid(iterator);
        bson_oid_to_string(oid,&id);
        printf("ID:%s\n",id);
      }

}

このコードを使用すると、更新を取得できます。しかし、テーラブルカーソルのドキュメントを見ると、最新のエントリを確実に取得するために、外側の while ループ内でmongo_findを実行する必要があるようです。ドキュメントは、gteを使用してクエリに追加することを提案しています。ドキュメントからのコピペ

query = QUERY( "_id" << GT << lastId ).sort("$natural");

問題は、oid が文字列に変換できるオブジェクトであることです。gteが機能するために、それをintに変換する必要があるとは本当に思いません。何か案は?

4

1 に答える 1

1

ObjectId は、Date および Timestamp オブジェクトと同様に、これらの演算子によって論理的に比較できます。ObjectId を文字列として表す必要はなく、(少なくともこの場合は) ObjectId を文字列と比較する実際的な理由にはなりません。

2 つの異なる BSON タイプを含む比較は、この比較順序に従うことに注意してください。

于 2012-10-12T16:47:15.203 に答える