我正在尝试编写一个节点。使用MongoDB节点获取特定MongoDB集合中最近添加的项的js应用程序。js驱动程序3.4。据我所知,这样做的方法是使用collection。countDocuments要将文档数传递给回调函数,请创建一个跳过该数字-1的光标,然后调用函数实际返回文档。我的问题是回调到集合。这些文档似乎从未真正运行过。
我的代码,包括console.log调试调用:
mongo.connect(dburl, (err, client) => {
console.log("Attempting to connect to database");
if(err) {
console.log("Couldn't connect to server");
throw err;
}
else {
var heatdata;
try {
var db = client.db(dbname);
console.log("Database: " + db.databaseName);
var dbo = db.collection(colName);
console.log("Collection: " + dbo.collectionName);
dbo.countDocuments({}, function(err,count) {
console.log("Count");
if (err) throw err;
dbo.find({}).skip(count - 1).toArray((err, docs) => {
console.log("Made it to skip");
if (err) {
res.writeHead(500, {'Content-Type': 'text/html'});
res.write('<h1>Error on accessing database information.</h1>');
console.log("Couldn't get the requested document");
res.end();
throw err;
}
else {
console.log("Result: " + docs);
heatdata = docs;
console.log("In method: " + heatdata);
}
});
console.log("Past the find");
});
console.log("Past the count");
}
catch(e) {
console.log("Error caught: " + e.name);
throw e.message;
}
console.log("Out of method: " + heatdata);
res.writeHead(200, {'Content-Type': 'application/json'});
res.write(heatdata);
res.end();
}
});
预期控制台输出:
Attempting to connect to database
Database: myDatabase
Collection: myCollection
Count
Made it to skip
Result: {foo:bar}
In method: {foo:bar}
Past the find
Past the count
Out of method: {foo:bar}
实际产量:
Attempting to connect to database
Database: myDatabase
Collection: myCollection
Past the count
Out of method: undefined
TypeError: First argument must be string or Buffer
换句话说,dbo.count文档中的任何代码都没有运行,包括第一个日志语句,它甚至在第一时间输入了回调。这可能是怎么回事?
提前感谢。
编辑:回溯如下:
TypeError: First argument must be a string or Buffer
at write_ (_http_outgoing.js:642:11)
at ServerResponse.write (_http_outgoing.js:617:10)
at mongo.connect (C:\Netshare\heatgraph.js:72:21)
at result (C:\Netshare\node_modules\mongodb\lib\utils.js:414:17)
at executeCallback (C:\Netshare\node_modules\mongodb\lib\utils.js:406:9)
at err (C:\Netshare\node_modules\mongodb\lib\operations\mongo_client_ops.js:286:5)
at connectCallback (C:\Netshare\node_modules\mongodb\lib\operations\mongo_client_ops.js:241:5)
at process.nextTick (C:\Netshare\node_modules\mongodb\lib\operations\mongo_client_ops.js:463:7)
at _combinedTickCallback (internal/process/next_tick.js:132:7)
at process._tickCallback (internal/process/next_tick.js:181:9)
注意,当我注释掉countDocuments
块并用dbo替换它时。查找()。限制(1)。排序({$natural:-1})。下一步(回调)
,我得到了完全相同的回溯。
编辑2:所以当我运行在超文本传输协议侦听器之外截取的原始代码时,它提供了这个控制台输出:
Attempting to connect to database
Connection: true
Database: faketemps
Collection: temps
Past the count
Out of array method: undefined
Connection: true
Count
Past the find
Made it to skip
Result: [object Object]
In array method: [object Object]
所以基本上,回调似乎没有运行的原因是我没有给它足够的时间来实际运行。我将尝试用
setInterval
来包装这一切,让它尝试几次实际获取一些东西,然后在适当的时间点超时。不管怎样,这是异步编程的正式经验。
countDocuments函数的使用方式如下:
dbo.countDocuments(requestObj, options, callback)
第二个参数是option参数(参见https://docs.mongodb.com/manual/reference/method/db.collection.countDocuments/更多细节)。
希望这会有所帮助。
我使用ubuntu 14.04,当我在终端上使用节点hello.js命令时,什么都不会发生。我使用sudo apt-get命令安装了这些包。我不知道出了什么问题。没有错误消息或任何东西。我寻找我的问题,但什么也没找到。
我的源XML文档 根据元素内容的模式,在元素中的元素中,我希望添加一个新的元素。元素是前导信息。因此,首先,我必须创建一个新的元素及其和内容。之后,我必须创建一个相应的元素,该元素具有相同的内容和特定的内容。 这是我的目标XML文档的示例(添加param03): 我的XSLT文档 结果XML文档错误 我遇到的问题: > 使用不会按预期更改节点上下文。新的元素将在最后一个位置添加到元素中,而不是按照
我得到了这样的错误{“code”:“er_parse_error”,“errno”:1064,“sqlmessage”:“您的SQL语法中有错误;请查看与您的MySQL服务器版本相对应的手册,以便在第1行'sp_li_uploaddata_get'附近使用正确的语法”,“sqlstate”:“42000”,“index”:0,“SQL”:“sp_li_uploaddata_get”}
问题内容: 我正在使用ColdFusion从数据库中提取数据到dataTable中,我希望当我单击datatable中的一行并触发事件时,该行的详细信息可以在同一页面上的div中显示。 下面是我正在使用的代码,但它无法正常工作,如果有人可以给我一个有效的示例,我将不胜感激 我收到以下错误消息: 错误-无法读取未定义的属性’_aData’ 问题答案: 在重新分配按钮之前,请尝试取消绑定该按钮的事件:
我试图用pyinstaller创建python脚本的可执行文件,但它不起作用。 如果我从终端运行exe文件,我得到这些错误: 我在项目的虚拟环境中使用pip安装了pyInster。 我将感谢任何帮助。 先谢谢你。
我试图使用cypher创建一个查询,该查询将“查找”厨师可能有的缺失食材,我的图是这样设置的: