无法使用mongo-c驱动程序将大型json文件导入mongoDB

时间:2015-09-22 13:18:24

标签: c json mongodb mongo-c-driver

我正在尝试将一个大的json文件导入mongodb,一次一个对象。 a.json 是一个json文件,其中包含15个key:value对的单个记录。我使用以下代码:

# include<stdio.h>
#include <bson.h>
#include <mongoc.h>
int main(void)
{
    int i,j,f=0;
    char c,s1[50],s2[50];
    FILE *fp1,*fp2;
    mongoc_client_t *client;
    mongoc_collection_t *collection;
    bson_error_t error;
    bson_oid_t oid;
    bson_t *doc=NULL;
    bson_t *update = NULL;
    bson_t *query = NULL;
    mongoc_init ();

    client = mongoc_client_new ("mongodb://localhost:27017/");
    collection = mongoc_client_get_collection (client, "ClickAppJson", "ClickJson");

    fp1=fopen("a.json","r");
    while((c=getc(fp1))!=EOF)
    {
        if(c=='{')
        {
            do{
                j=0;
                c=getc(fp1);
                do{
                        s1[j]= c;
                        j++;
                        c=getc(fp1);
                }
                while(c !=':');
                s2[j]='\0';
                c=getc(fp1);
                j=0;
                do{
                    s2[j]= c;
                    j++;
                    c=getc(fp1);
                }
                while(c !=','||c!='}');
                s2[j]='\0';
                if(f==0){
                    bson_oid_init (&oid, NULL);
                    doc = BCON_NEW ("_id", BCON_OID (&oid),s1,s2);
                    f=1;
                }
                else{
                    query = BCON_NEW ("_id", BCON_OID (&oid));
                    update = BCON_NEW("$set", "{", s1, s2, "}");
                }
            }
           while(c!='}');
        }
    }
    fclose(fp1);
    bson_destroy (doc);
    mongoc_collection_destroy (collection);
    mongoc_client_destroy (client);
    return 0;
}

我希望一次将一个记录一个文档导入monogdb。

我正在使用fedora 21中的 gcc 编译这个程序。根据编译器没有错误。但是,当我运行此程序时,它显示以下错误:

2015/09/22 18:32:15.0303: [13623]:    DEBUG:      cluster: Client initialized in direct mode.
Segmentation fault (core dumped)

我想一次将一个记录一个文档导入monogdb。 请问你能从这段代码中指出错误吗? 提前致谢。 P.S这是我在StackOverflow中的第一个问题。请原谅任何缺点。:)

1 个答案:

答案 0 :(得分:0)

可能你可以使用:

const char* fileContentAsUtf8;
bson_t* query = bson_new_from_json(reinterpret_cast<const uint8_t*>(fileContentAsUtf8), -1, &error);

然后使用bson方法提取必要的信息,而不是编写自己的json解析器。