我正在尝试将一个大的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中的第一个问题。请原谅任何缺点。:)
答案 0 :(得分:0)
可能你可以使用:
const char* fileContentAsUtf8;
bson_t* query = bson_new_from_json(reinterpret_cast<const uint8_t*>(fileContentAsUtf8), -1, &error);
然后使用bson方法提取必要的信息,而不是编写自己的json解析器。