2

次のコードは機能します。つまり、バッファから読み取り、Mongo の「s」フィールドに追加しますが、ループを通過するたびにデータベースを呼び出します。

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

私がやりたいのは、ベクトルに4つの値を入力し、そのベクトルを1回の呼び出しでデータベースに挿入することです。これを試しました:

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]));
}

ただし、Mongo で重複する「s」フィールドを作成します。どんな助けでも大歓迎です、事前に感謝します。

4

3 に答える 3

5

あなたが何を求めているのか完全に明確ではありませんが、タイトルから判断すると、私は助けを提供しようとします.

C++ を使用して mongo で BSON 配列を作成するには、次の 2 つの方法があります。

  1. BSON マクロと同様に BSON_ARRAY マクロを使用しますが、キーは使用しません。例えば。

    BSONArray arr = BSON_ARRAY( "hello" << 1 << 2 << BSON( "foo" << BSON_ARRAY( "bar" << "baz" << "qux" ) ) );

    上記の例では、4 つの値を持つ配列が作成されます。最後の要素は、3 つの配列値を持つ BSON ドキュメントです。

    [ "こんにちは", 1, 2, { foo : ["bar", "baz", "qux"] } ]

  2. BSONArrayBuilder を使用して、マクロを使用せずに配列を構築します。例えば。

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

    これにより、2 つの値 [1, 2] を持つ配列が作成されます。

したがって、4 つの値を持つベクトルを作成する場合は、上記の方法のいずれかを使用して配列を作成し、その配列を "s" に割り当ててから、結果のドキュメントを挿入する必要があります。それはあなたにこの形式の何かを与えるでしょう { s : [ value1, value2, value3, value4 ] }

于 2012-09-17T18:41:15.173 に答える
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);
于 2012-09-18T17:25:14.893 に答える