Sta*_*als 5 c++ mongodb bson mongo-cxx-driver
例如,如果我在shell中执行此操作
> db.numbers.save( { name: "fibonacci", arr: [0, 1, 1, 2, 3, 5, 8, 13, 21] } )
Run Code Online (Sandbox Code Playgroud)
然后我想进入arr我的c ++程序.
之后,我得到了我BSONObj可以得到name与
std::string name = p.getStringField("name");
Run Code Online (Sandbox Code Playgroud)
pBSON对象在哪里.
但是从数组中获取元素并将它们保存到std :: vector的正确方法是什么?
编辑:
经过一些研究后,我发现了BSONElement doxygen文档并做了这个.
std::vector<int> arr;
std::vector<BSONElement> v = p.getField("arr").Array();
for(std::vector<BSONElement>::iterator it = v.begin(); it != v.end(); ++it)
arr.push_back(it->numberInt());
Run Code Online (Sandbox Code Playgroud)
但我仍然不确定这是否正确.
另外两种方式:
// this way is easy but requires exact type match (no int64->int32 conversion)
std::vector<int> ints;
p.getObjectField("arr").vals(ints); // skips non int values
p.getObjectField("arr").Vals(ints); // asserts on non int values
Run Code Online (Sandbox Code Playgroud)
要么
// this way is more common and does the conversion between numeric types
vector<int> v;
BSONObjIterator fields (p.getObjectField("arr"));
while(fields.more()) {
v.push_back(fields.next().numberInt());
}
//same as above but using BSONForEach macro
BSONForEach(e, p.getObjectField("arr")) {
v.push_back(e.numberInt());
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以将输出保留为a vector<BSONElement>并直接使用它们,但是您需要确保BSONObj比矢量更长.
| 归档时间: |
|
| 查看次数: |
3811 次 |
| 最近记录: |