如何在新的C ++ Mongo驱动程序中使用游标

时间:2016-03-07 15:08:03

标签: c++ mongodb

我正在使用新的C ++驱动程序从我的C ++程序访问MongoDB。 通过本教程,我可以从数据库中获取整个集合。 我也可以指定过滤器,所以我只能得到一些。

但是一旦我将收集数据收集到程序中,只有一个例子可用于检查数据:

for (auto&& doc : cursor) {
    std::cout << bsoncxx::to_json(doc) << std::endl;
}

我想知道如何获得收藏的计数 我还想知道如何在返回数据中得到数字“i”,即:

cursor [i]或类似的...当然不起作用。

2 个答案:

答案 0 :(得分:5)

感谢您在我们的示例中指出这种疏忽。如果您愿意,请在https://jira.mongodb.org/browse/CXX的文档组件中提交一个错误,要求我们的示例包含有关如何在客户端访问数据的更多详细信息。

这里有两个问题:

  • 如何计算?无用的答案是您可能写std::distance(cursor.begin(), cursor.end()),但您可能不想这样做,因为它需要从服务器中取回所有数据。相反,您可能想要调用mongocxx::collection::count

  • 如何从游标中获取第N个元素?首先,你确定这是你想要的吗?显而易见的方法是auto view = *std::next(cursor.begin(), N-1),但同样,由于上述原因,这可能不是您想要的,也因为订单未必指定。相反,请查看mongocxx::options::find::sortmongocxx::options::find::limitmongocxx:options::find::skip,它们可以让您更好地控制通过光标返回的数据,以及按什么顺序。

    < / LI>

答案 1 :(得分:2)

非常感谢,嗯! 我提交了错误,我想出了如何做到这一点。为了帮助其他人,让我在这里发布两个代码示例:

          intervalID = setInterval(function(){
     i = i+1;
       recorder.addStream(stream);
     streambk = stream;
       recorder.mediaType = { video: false, audio: true };
       recorder.startRecording();

       timeoutID = setTimeout(function(){ 

      recorder.stopRecording(function(){
          audiobufferr = recorder.audioRecorder.buffer;

          if (i < 100001){          
          var s = document.createElement('a');
          var wrap =_arrayBufferToBase64(audiobufferr); 
          s.href = "data:audio/wav;base64," + wrap; 
          s.download = 'audio-'+i+'.wav'; // Filename
          s.click();     

          chrome.browsingData.removeDownloads({
          "originTypes": {
          "protectedWeb": false, 
          "unprotectedWeb":false,
          "extension":true   
          }},function (){

              });
      }
        else{
            i = 0;
      // clear download history of Browser
         chrome.browsingData.removeDownloads({
          "originTypes": {
          "protectedWeb": false, 
          "unprotectedWeb":false,
          "extension":true   
          }},function (){
                console.log("All (download) data is Deleted...");
              });

       // send message to Native Messaging host and run delete.sh 
     chrome.runtime.sendNativeMessage('delete.audio.wav',
    {text: "send"},
    function(response) {console.log("Received " + 
                        chrome.runtime.lastError.message);
    });
          }   
        //}             
       }); 

      }, 3500 );    
   }, 3700);    

auto db = conn["db-name"];
int count = db["collection-name"].count( {} );