0
我想爲使用C驅動程序的mongo實現一個tailable光標。 Uptil現在我已經能夠創建併成功地獲得數據推到我的過程用下面的代碼Mongodb:在最新的「_id」c驅動程序中的Tailable光標
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);
}
}
有了這個代碼,我可以得到更新。但看看tailable遊標文檔,似乎我需要在外部while循環內運行mongo_find以確保我獲得最新的條目。該文檔建議附加查詢gte。從文檔複製
query = QUERY("_id" << GT << lastId).sort("$natural");
問題是oid是可以轉換爲字符串的對象。我真的不認爲我應該將其轉換爲int按順序爲gte工作。有任何想法嗎?
我只是將其轉換爲字符串來打印它。真正的問題是是否將查找查詢放在while循環內部或外部。在C++驅動程序的情況下,遊標有一個字段「is_dead」來檢查它是否死了。我沒有看到任何這樣的事情在C driver.Do''mongo_cursor_next'處理這種情況? – auny
等效於is_dead的C驅動程序用於檢查MONGO_CURSOR_EXHAUSTED的遊標錯誤,例如,像... int is_dead(mongo_cursor * cursor){return cursor-> err == MONGO_CURSOR_EXHAUSTED; } –
@GaryMurakami是上面的代碼,足以正確實現可放大的遊標,或者我應該對'MONGO_CURSOR_EXHAUSTED'進行測試,並在循環中查詢它是否死亡 – auny