我正在尝试使用C驱动程序为mongo实现一个tailable游标。 Uptil现在我已经能够使用以下代码创建它并成功将推送数据导入我的流程
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 正常工作。有什么想法吗?
答案 0 :(得分:1)
ObjectId可以由这些运算符进行逻辑比较,Date和Timestamp对象也可以。不应该将ObjectId表示为字符串,并且没有实际的理由(至少在这种情况下)将ObjectId与字符串进行比较。
请注意,涉及两种不同BSON类型的比较将遵循this compare order。