Я использую библиотеку MongoDB C для вставки документов в различные коллекции в пределах одной базы данных, и я неоднократно получаю ссылку на ошибку (вместе с замечательной ошибкой) при вызове BSON_APPEND_OID (doc, "_id ", & oid);MongoDB BSON OID Failure
I хотел использовать одну и ту же коллекцию - так, чтобы каждая запись с отметками времени в каждой коллекции имела одинаковое значение, и именно тогда я начал получать ошибку. Поэтому я отказался от этого и попытался создать новые OID для каждой записи, и я все равно получаю ту же ошибку.
Version один, где я пытаюсь повторно использовать OID:
int insert_mongo(char json[100], char *coll, mongoc_client_t *client, bson_oid_t oid){
mongoc_collection_t *collection;
bson_error_t error;
bson_t *doc;
collection = mongoc_client_get_collection (client, "edison", coll);
doc = bson_new_from_json((const uint8_t *)json, -1, &error);
BSON_APPEND_OID (doc, "_id", &oid);
if (!doc) {
fprintf (stderr, "%s\n", error.message);
return EXIT_FAILURE;
}
if (!mongoc_collection_insert (collection, MONGOC_INSERT_NONE, doc, NULL, &error)) {
fprintf (stderr, "%s\n", error.message);
return EXIT_FAILURE;
}
bson_destroy (doc);
mongoc_collection_destroy (collection);
return EXIT_SUCCESS;
}
и версию 2, где я создаю новый OID:
int insert_mongo(char json[100], char *coll, mongoc_client_t *client){
mongoc_collection_t *collection;
bson_error_t error;
bson_t *doc;
bson_oid_t oid;
bson_oid_init (&oid, NULL);
collection = mongoc_client_get_collection (client, "edison", coll);
doc = bson_new_from_json((const uint8_t *)json, -1, &error);
BSON_APPEND_OID (doc, "_id", &oid);
if (!doc) {
fprintf (stderr, "%s\n", error.message);
return EXIT_FAILURE;
}
if (!mongoc_collection_insert (collection, MONGOC_INSERT_NONE, doc, NULL, &error)) {
fprintf (stderr, "%s\n", error.message);
return EXIT_FAILURE;
}
bson_destroy (doc);
mongoc_collection_destroy (collection);
return EXIT_SUCCESS;
}
Обе версии сегментного вина, что во второй раз функции является вызванный с MongoDB bson_append_oid(): precondition failed: bson
Действительно ... в некоторых случаях символ [100] был слишком коротким. фиксируя все, что исправлено. Спасибо, что поняли это. Я слишком долго смотрел на него! – Davidgs