1

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

# 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。请你能指出这段代码中的错误吗?提前致谢。PS 这是我在 StackOverflow 上的第一个问题。如有不足请见谅。:)

4

1 回答 1

0

可能你可以使用:

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

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

于 2015-09-23T06:45:10.953 回答