2012-09-14 31 views
1

以下代码有效,它的作用是:它从缓冲区中读取并追加到Mongo中的“s”字段,但每次通过时都会调用数据库循环:用C++将数组数组插入到mongo中

bsonData = BSON("$push"<<BSON("s" << BSON("r" << (unsigned int)RecordNumber << "t" << Variant << "u" << TimeStamp << "v" << Value))); 

我希望做的是填补了向量与4个值,并插入载体到数据库中的一个电话,我想这:

for(i=0;i<vRecNo.size();i++) 
{ 
    bOB.append("s", BSON("r" << (unsigned int)vRecNo[i] << 
          "t" << (unsigned int)vType[i] << 
          "u" << (unsigned int)vTimeStamp[i] << 
          "v" << (unsigned int)vValue[i])); 
} 

而造成的重复“ s在蒙古的领域。 任何帮助非常感谢,提前谢谢。

回答

4

我不完全清楚你在问什么,但从标题判断我会尽力提供帮助。

有两种方式蒙戈创建BSON阵列,C++:

  1. 使用BSON_ARRAY像宏宏BSON,但没有钥匙。例如。

    BSONArray ARR = BSON_ARRAY( “你好” < < BSON( “foo” 的< < BSON_ARRAY( “酒吧” < < “巴兹” < < “qux”)));

    上面的示例将建立一个数组具有四个值,其中最后一个元素是具有3阵列的BSON文档值

    [“你好”,1,2,{FOO:[“酒吧”,“巴兹“,”qux“]}]

  2. 使用BSONArrayBuilder构建没有宏的数组。例如。

    BSONArrayBuilder b; BSONArray arr = b.append(1).append(2).arr();

    这将创建一个数组与2个值[1,2]

因此,在你的事业,如果你想创建4个值的向量,你应该创建一个数组,使用的一个上述方法,将该数组分配给“s”,然后插入生成的文档。 这将给你这种形式的东西{s:[value1,value2,value3,value4]}

1

谢谢你的提示,我终于明白了,我发布了一段代码, :

BSONObjBuilder bOb; 
    BSONArrayBuilder bArr; 
    for(i=0;i<vRecNo.size();i++) 
    { 
     BSONObj bo = BSON("r" << (unsigned int)vRecNo[i] << "t" << vType[i] << "u" << (unsigned int)vTimeStamp[i] << "v" << vValue[i]); 
     bArr.append(bo); 
    } 
    bOb.append("s", bArr.arr()); 
    BSONObj bsonData = BSON("$set" << bOb.obj()); 

    conn.update("DatabaseName.Collection", qryData, bsonData); 
0

你可以转换为载体的std ::列表,并追加列表:

std::list<std::string> aList(aVec.begin(),avec.end()) 
BSONArrayBuilder arrBuilder; 
arrBuilder.append(aList); 

奇怪的是,你可以追加一个std ::列表,但不是一个std :: VEC。