mongodb c driver的使用总结(2)-- 查询

mongodb c driver的使用总结(2)-- 查询

1、查询样例

bson_t query;
bson_t child;
bson_init(&query);

BSON_APPEND_INT64(&query, "id", 0);

mongoc_cursor_t m_pCursor = mongoc_collection_find(m_pCollection,
    MONGOC_QUERY_NONE,
    0,
    0,
    0,
    &query,
    NULL,   /*  Fields, NULL for all.  */
    NULL);  /*  Read Prefs, NULL for default  */

bson_destroy(&query);
bson_error_t error;
if (mongoc_cursor_error(m_pCursor, &error)) {
    cout << "Query Failure: " << error.message;
     return;
}

const bson_t *doc;

while (!mongoc_cursor_error(m_pCursor, &error)
    && mongoc_cursor_more(m_pCursor))
{
     if (mongoc_cursor_next(m_pCursor, &doc))
    {
        GetRecord(doc);
    }
     else
    {
         break;
    }
}
if (mongoc_cursor_error(m_pCursor, &error)) {
    cout << "Query Failure: " << error.message;
}

mongoc_cursor_destroy(m_pCursor);

2、获取记录

void GetRecord( const bson_t *doc)
{
    bson_iter_t iter;
    bson_iter_init(&iter, doc);

     if (bson_iter_find(&iter, "id"))
    {
        cout << bson_iter_int64(&iter) << "|";
    }
   
     if (bson_iter_find(&iter, "field1"))
    {
        cout << bson_iter_int64(&iter) << "|";
    }

     if (bson_iter_find(&iter, "field2"))
    {
         const uint8_t *binary = NULL;
        bson_subtype_t subtype = BSON_SUBTYPE_BINARY;
        uint32_t binary_len = 0;
        bson_iter_binary(&iter, &subtype, &binary_len, &binary);
         string msg;
        msg.assign(( const  char*)binary, binary_len);
        cout << msg << endl;
    }
}

3、复杂的or查询和比较查询

// id==4 or field1 <= 12
bson_t query;
bson_t child, child2, child3;
bson_init(&query);
bson_append_array_begin(&query, "$or", -1, &child);

// 0: 第一个or部分
bson_append_document_begin(&child, "0", -1, &child2);
BSON_APPEND_INT64(&child2, "id", 4);
bson_append_document_end(&child, &child2);

// 1:第二个or部分
bson_append_document_begin(&child, "1", -1, &child2);

// field1 <= 12
bson_append_document_begin(&child2, "field1", -1, &child3);
BSON_APPEND_INT64(&child3, "$lte", 12);
bson_append_document_end(&child2, &child3);

bson_append_document_end(&child, &child2);

bson_append_array_end(&query, &child);

char * str = bson_as_json(&query, NULL);
printf("\n%s\n", str);

你可能感兴趣的:(mongodb c driver的使用总结(2)-- 查询)