【发布时间】:2017-05-27 21:13:35
【问题描述】:
我正在使用 Mongoose 对 MongoDB 进行查询,但遇到了一个奇怪的问题,即我的第二个查询会导致 Mongoose 挂起并且不返回结果。
我创建了一个 repo 来复制这个问题 here。如果您愿意,您可以克隆并在本地运行它。只需按照Usage 的说明操作即可。
数据集
name,address,city,state,zip
Jane Doe,123 Main St,Whereverville,CA,90210
John Doe,555 Broadway Ave,New York,NY,10010
一个查询
const mongo = new Mongo();
const dataSet1 = await mongo.find('locations', {
limit: 1,
});
// const dataSet2 = await mongo.find('locations', {
// limit: 2,
// });
mongo.close();
console.log({
dataSet1,
// dataSet2,
});
这里我们查询位置集合并只返回一个文档。
Mongoose default connection open to
{ dataSet1:
[ { _id: 5877b4568f5c931b5f84cd93,
name: 'Jane Doe',
address: '123 Main St',
city: 'Whereverville',
state: 'CA',
zip: '90210' } ] }
Mongoose default connection disconnected
如预期的那样,返回一个文档。
两个查询
const mongo = new Mongo();
const dataSet1 = await mongo.find('locations', {
limit: 1,
});
const dataSet2 = await mongo.find('locations', {
limit: 2,
});
mongo.close();
console.log({
dataSet1,
dataSet2,
});
这里我们对两个文档的位置集合进行第二次查询。
>>> RESTARTING <<<
(node:87245) DeprecationWarning: Calling an asynchronous function without callback is deprecated.
Mongoose default connection open to
^C
进程挂起并且不返回任何内容。无法完全弄清楚为什么会发生这种情况。
Mongo类代码可见here。
编辑: - 更新代码以使用本机承诺,但问题仍然存在。
【问题讨论】:
-
请在此处阅读 - mongoosejs.com/docs/promises.html 他们不完整的“承诺”
-
谢谢,我查看了您的链接并决定使用本机承诺。我已经更新了Mongo.js。但是它仍然挂起,并带有不同的警告
DeprecationWarning: Calling an asynchronous function without callback is deprecated。您认为这与我的问题有关吗? -
使用文档中描述的 .then()。这可能是潜在的问题,但如果你想避免使用回调等,请使用适当的库,如
fibers或node-sync等。虽然我自己没有将它们与猫鼬一起使用,但给它一个如果你想试试。更多信息在这里stackoverflow.com/questions/16763890/…
标签: node.js mongodb mongoose database