2012-07-12 46 views
1

我想使用mongodb _id屬性來保證名稱中的唯一性。從MongoDB _id轉換爲C中的字符串

mongo_cursor_init(cursor, &conn, &database); 
bson_iterator iterator[1]; 

bson_find(iterator, mongo_cursor_bson(cursor), "name"); 
const char *filename = bson_iterator_string(iterator); 

bson_find(iterator, mongo_cursor_bson(cursor), "_id"); 
const char *mongoid = bson_iterator_string(iterator); 

char name[255]; 
strcpy(name,filename); 
strcat(name,"."); 
strcat(name,mongoid); 

但是,變量mongoid沒有正確填充(完全...)。我不知道如何找到_id的數據類型。有沒有人做過這個?謝謝!

編輯:我想答案是here,但不知道...

回答

3

希望這有助於有人...

蒙戈_id串:

char mongoid[25]; 
bson_find(iterator, mongo_cursor_bson(cursor), "_id"); 
bson_oid_t *oid = bson_iterator_oid(iterator); 
bson_oid_to_string(oid,mongoid); 

字符串蒙戈_id:

bson_oid_t new_oid; 
bson_oid_from_string(&new_oid,mongoid); 
1

你想bson_iterator_oid() --oid是的ObjectId。

你可以得到字節出這一點,並將其轉換使用循環樣(未經測試)爲十六進制:

bson_find(iterator, mongo_cursor_bson(cursor), "_id"); 
bson_oid_t *oid = bson_iterator_oid(iterator); 

char mongoid[25]; 
for(int i = 0; i < 12; i++) 
{ 
    snprintf(mongoid, 2, "%02X", oid->bytes[i]); 
} 

而且,考慮使用strncpystrncat與理智的最大值 - 如果名稱字段是300字符長,你會在這裏有一些意想不到的行爲。

+0

謝謝,這是我需要什麼幾乎,它把我送到了正確的道路上。 – jacobra 2012-07-16 21:44:03

相關問題