我正在使用Mongoose对MongoDB进行查询,我遇到了一个奇怪的问题,我的第二个查询会导致Mongoose挂起而不返回结果。
我创建了一个复制此问题的仓库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,
});
这里我们对两个文档的locations集合进行第二次查询。
>>> RESTARTING <<<
(node:87245) DeprecationWarning: Calling an asynchronous function without callback is deprecated.
Mongoose default connection open to
^C
该过程挂起并且不会返回任何内容。无法弄清楚为什么会发生这种情况。
可以看到Mongo
类代码here。
编辑: - 更新了使用本机承诺的代码,但问题仍然存在。
答案 0 :(得分:0)
我可以通过更改Mongo.js中的代码来解决此问题:
db.on('error', (err) => reject(err));
db.on('open', () => {
model.find(query, fields, options)
.limit(limit)
.exec()
.then(docs => resolve(docs))
.catch(err => reject(err));
});
});
到
model.find(query, fields, options)
.limit(limit)
.exec()
.then(docs => resolve(docs))
.catch(err => reject(err));
我不太确定第一种方法导致此错误的原因。