我正在使用新的C ++驱动程序从我的C ++程序访问MongoDB。 通过本教程,我可以从数据库中获取整个集合。 我也可以指定过滤器,所以我只能得到一些。
但是一旦我将收集数据收集到程序中,只有一个例子可用于检查数据:
for (auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
我想知道如何获得收藏的计数 我还想知道如何在返回数据中得到数字“i”,即:
cursor [i]或类似的...当然不起作用。
答案 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::sort
,mongocxx::options::find::limit
和mongocxx:options::find::skip
,它们可以让您更好地控制通过光标返回的数据,以及按什么顺序。
答案 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( {} );