Обработка записи MONGO с вложенными массивами в Stack Overflow

Я пытаюсь использовать API-интерфейс MONGO C ++ для обработки набора записей, которые выглядят следующим образом … Число строк в массиве «Записи» является переменным: оно равно 13 или 7.

{ "_id" : ObjectId("541af7a4c9c7450a5a5c7e8e"), "SvId" : "SV120", "UTCTime" : "2014-09-18T15:17:56.541Z", "Interval" : 10, "HPLANC" : "DownlinkA",
"Entries" : [
[       {       "IPAddress" : "172.20.10.20" },     {       "Port" : 4096 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.10.20" },    {        "Port" : 4097 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.10.20" },         {       "Port" : 4098 },
{        "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.10.20" },         {       "Port" : 4099 },
{       "MessageCount" : "0" },     {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.10.20" },         {       "Port" : 4103 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.100.10" },        {       "Port" : 4102 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.100.10" },         {       "Port" : 4104 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.150.10" },    {       "Port" : 4100 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.200.10" },        {       "Port" : 4100 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.200.10" },        {       "Port" : 4150 },
{       "MessageCount" : "0" },     {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.200.10" },        {       "Port" : 4151 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {       "IPAddress" : "172.20.200.10" },        {       "Port" : 4152 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ],
[       {        "IPAddress" : "172.20.200.10" },        {       "Port" : 4153 },
{       "MessageCount" : "0" },         {       "ByteCount" : "0" } ] ] }

Я запрашиваю коллекцию на основе UTCTime и SvId … когда я получаю записи обратно, я не уверен, как пройти их все …

Обычно я просто получаю курсор и перебираю набор возвращаемых записей с помощью «next ()» … но теперь у меня есть поле «Записи», которое имеет 7 или 13 записей. Как мне получить доступ к каждому из этих предметов? Я предполагаю, что должен быть какой-то «подкурсор», который я могу использовать для их прохождения.

Я просматриваю API и примеры, но вложенных массивов немного.

Спасибо,

стог

0

Решение

Вот Есть отличный пример того, как использовать массивы с API de MongoDB.

РЕДАКТИРОВАТЬ

Я строю пример:

#include "mongo/bson/bson.h"
#include <iostream>
#include <list>
#include <vector>

using mongo::BSONArray;
using mongo::BSONArrayBuilder;
using mongo::BSONObj;
using mongo::BSONObjBuilder;
using mongo::BSONElement;

using namespace std;

int main() {
// Build an object
BSONObjBuilder bob;

// Build a array
BSONArray arr = BSON_ARRAY(
BSON_ARRAY( BSON( "IPAddress" << "172.20.10.20") << BSON( "Port" << 4096) << BSON( "MessageCount" << 0) << BSON( "ByteCount" << 0) ) <<
BSON_ARRAY( BSON( "IPAddress" << "172.20.10.10") << BSON( "Port" << 4100) << BSON( "MessageCount" << 0) << BSON( "ByteCount" << 0) ) <<
BSON_ARRAY( BSON( "IPAddress" << "172.20.10.10") << BSON( "Port" << 4150) << BSON( "MessageCount" << 0) << BSON( "ByteCount" << 0) ) <<
BSON_ARRAY( BSON( "IPAddress" << "172.20.10.10") << BSON( "Port" << 4152) << BSON( "MessageCount" << 0) << BSON( "ByteCount" << 0) )
);
bob.appendArray("Entries", arr);

// Create the object
BSONObj an_obj = bob.obj();
cout << "BSON: "<< an_obj << endl;

// Print the array out
vector<BSONElement> array = an_obj["Entries"].Array();
for (vector<BSONElement>::iterator ar = array.begin(); ar != array.end(); ++ar){
cout << *ar << endl;
vector<BSONElement> elem = ar->Array();
for (vector<BSONElement>::iterator it = elem.begin(); it != elem.end(); ++it){
cout << *it << endl;
}
}
cout << endl;

return 0;
}

Выход:

BSON: { Entries: [ [ { IPAddress: "172.20.10.20" }, { Port: 4096 }, { MessageCount: 0 }, { ByteCount: 0 } ], [ { IPAddress: "172.20.10.10" }, { Port: 4100 }, { MessageCount: 0 }, { ByteCount: 0 } ], [ { IPAddress: "172.20.10.10" }, { Port: 4150 }, { MessageCount: 0 }, { ByteCount: 0 } ], [ { IPAddress: "172.20.10.10" }, { Port: 4152 }, { MessageCount: 0 }, { ByteCount: 0 } ] ] }
0: [ { IPAddress: "172.20.10.20" }, { Port: 4096 }, { MessageCount: 0 }, { ByteCount: 0 } ]
0: { IPAddress: "172.20.10.20" }
1: { Port: 4096 }
2: { MessageCount: 0 }
3: { ByteCount: 0 }
1: [ { IPAddress: "172.20.10.10" }, { Port: 4100 }, { MessageCount: 0 }, { ByteCount: 0 } ]
0: { IPAddress: "172.20.10.10" }
1: { Port: 4100 }
2: { MessageCount: 0 }
3: { ByteCount: 0 }
2: [ { IPAddress: "172.20.10.10" }, { Port: 4150 }, { MessageCount: 0 }, { ByteCount: 0 } ]
0: { IPAddress: "172.20.10.10" }
1: { Port: 4150 }
2: { MessageCount: 0 }
3: { ByteCount: 0 }
3: [ { IPAddress: "172.20.10.10" }, { Port: 4152 }, { MessageCount: 0 }, { ByteCount: 0 } ]
0: { IPAddress: "172.20.10.10" }
1: { Port: 4152 }
2: { MessageCount: 0 }
3: { ByteCount: 0 }

Я надеюсь, что это то, что вы ищете! Дай мне знать!

1

Другие решения


По вопросам рекламы [email protected]