我发展我的MEAN堆栈应用功能,这将让我在数据库中保存所有的企业躺在选定位置的一定距离内的列表。这里是我的代码:
if (fullAddress) {
queryAdvns = Listing.aggregate().near(
{
near: {type: 'Point', coordinates: [lng, lat]},
distanceField: 'distance',
maxDistance: within,
query: query._conditions,
spherical: true,
distanceMultiplier: 0.00062137,
num: 1000,
limit: 1000
});
queryCount = Listing.aggregate().near(
{
near: {type: 'Point', coordinates: [lng, lat]},
distanceField: 'distance',
maxDistance: within,
query: query._conditions,
spherical: true,
distanceMultiplier: 0.00062137,
num: 1000,
limit: 1000
});
}
if (fullAddress) {
logger.info("Searching by Distance");
queryCount
.limit(1000)
.exec(function (err, list) {
logger.info("Counting Advance Search Result");
if (!err) {
var newLimit = limit + skip;
queryAdvns
.sort(sort)
.limit(newLimit)
.skip(skip)
.exec(function (err, result) {
res.json({
searchResult: result,
count: list.length
});
});
} else {
return next(err);
}
});
}
当我在我的应用程序运行查询,我得到了以下错误消息:“错误:MongoError:在‘光标’选项是必需的,除了用解释参数聚集”和我的应用程序不会产生在用户界面上的任何结果。
我对我的当地环境,在那里我得到这个错误和行为的运行蒙戈版本4.0.2。当我它使用Mongo的3.2.13版本我的开发服务器上运行完全相同的代码,相同的代码运行有效,成功地在UI公布的查询结果。据我了解,我需要包括光标选项或在查询说明与aggregate命令参数,因为蒙戈版本3.6(及以后)都不允许使用aggregate命令的无光标选项或解释的说法。
我不是很擅长用aggregate命令,因此无法弄清楚如何修改这个代码包括光标选项或解释的说法。欣赏一些帮助。
经过大量的研究,发现这个问题的产生是因为MongoDB的和猫鼬的版本不匹配的。上述问题的发生是因为我使用MongoDB的版本4.0.2和4.4.5猫鼬。 MongoDB的版本3.6向前除去而不光标选项以使用聚合命令,除非该命令包含解释参数的能力。降级到MongoDB的3.2版本解决了这个问题对我来说。原来,这里还有某种在猫鼬版本的bug,5.0之前错误地抛出,即使aggregate命令用正确写入此错误的MongoDB版本3.6及以后的(即使用带有游标选项或解释参数聚集命令)。所以,如果你使用的MongoDB 3.6及更高版本,您应该使用猫鼬5.0+。
摘要 - 避免的MongoDB /猫鼬版本不匹配。对于3.6之前的MongoDB版本,使用猫鼬4.4.5。 MongoDB的版本3.6发布,使用猫鼬5.0及以上。