2016-12-28 77 views
0

我試圖使用MongoDB cxx傳統驅動程序BSONBuilder構建一個$ in查詢。到現在爲止,我使用下面的代碼來構建一個簡單的ID =「...」查詢,從我收集的MongoDB單加載文件:

BSONObjBuilder b; 
b.append("_ID", "..."); 
BSONObj p = b.obj(); 

現在我想例如生成一個查詢

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } } 

,並用它通過接口來獲得一定範圍的文件:

... 

auto_ptr<DBClientCursor> cursor = c.query("tutorial.persons", p); 

while (cursor->more()) 
cout << cursor->next().toString() << endl; 

.... 

請問你知道如何建立在使用BSONObjBuilder查詢$人嗎?或者還有其他一些竅門可以用ID查詢一個查詢來說10個文檔嗎?

非常感謝。

更新:

我試了下面的代碼片段。

mongo::BSONObjBuilder oBuilder; 
// oBuilder.append(STR_FIELD_PARENT_ITEM_ID, aIDs); 

mongo::BSONArrayBuilder oJsonIDarr; 
for(unsigned int ii = 0; ii < aIDs.size(); ii++) { 
    oJsonIDarr << aIDs[ii]; 
} 

oBuilder.append("$in", oJsonIDarr.arr()); 

BOOSTER_WARNING("Comment_Mongo") << "query: " << oBuilder.obj(); 

mongo::BSONObjBuilder oQueryObj; 
oQueryObj.append(STR_FIELD_ID, oBuilder.obj()); 

BOOSTER_WARNING("Comment_Mongo") << "query: " << oQueryObj.obj(); 

第一個查詢obj看起來像例如

query: { $in: [ "585c27f903733890966a618d", "585c278ed7cd3684afe5b495" ] } 

,並儘快送往的MongoDB /驅動器拋出一個異常..

第二打印以下查詢:

query: { _id: {} } 

我很高興對任何TIPP!非常感謝!

回答

0

你可以嘗試下面的東西。

BSONObjBuilder b; 
BSONArrayBuilder bab; 
bab.append("val"); 
b.append("$in", bab.arr())); 
BSONObjBuilder id; 
id.append("_id", b.done()); 
BSONObj p = b.obj(); 
+0

嗨Sagar,謝謝你的回答!我只是試過..但它只生成「{$ in:[,,... ]}」部分..你知道如何添加「字段」?再次感謝! – AlexM

+0

已更新。看看它是否有幫助。 – Veeram

+0

嗨,我改變了我的來源。一旦到達帶有「b.done()」的行,就會引發SIGSEGV(分段錯誤)..您還有其他想法嗎? :>非常感謝您的幫助! – AlexM

相關問題