我一直在本地构建我的应用程序,所有的工作都很好,它使用了最新的MongoDB 3.4,我的聚合调用也很好。
app.get('/random_menu', function (req, res) {
Menus.aggregate([{$sample: {size: 1}}], function (err, data) {
res.json(data);
});
});现在,我已经将代码移到我的raspberry pi中,它仅限于MongoDB 2.4.10,而且我的聚合函数似乎无法在其上工作。我的应用程序不返回任何数据,也没有错误。
为了进行测试,我通过RoboMongo测试了它,它在本地3.4版本上运行得很好:
db.getCollection('menus').aggregate([{$sample: {size: 1}}])但是,当我通过RoboMongo在pi db上尝试时,我会得到以下错误:
assert: command failed: {
"errmsg" : "Pipeline::parseCommand(): unrecognized field \"cursor",
"ok" : 0
} : aggregate failed
_getErrorWithCode@src/mongo/shell/utils.js:23:13
doassert@src/mongo/shell/assert.js:13:14
assert.commandWorked@src/mongo/shell/assert.js:266:5
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1215:5
@(shell):1:1
Error: command failed: {
"errmsg" : "Pipeline::parseCommand(): unrecognized field \"cursor",
"ok" : 0
} : aggregate failed :
_getErrorWithCode@src/mongo/shell/utils.js:23:13
doassert@src/mongo/shell/assert.js:13:14
assert.commandWorked@src/mongo/shell/assert.js:266:5
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1215:5
@(shell):1:1我试过搜索这个,但似乎什么都找不到。我是MongoDB的新手,所以任何输入都会非常感谢。
发布于 2017-03-26 01:13:39
MongoDB 2.4于2013年3月首次发布,并于2016年3月到期(比MongoDB 3.4.0发布前6个月)。针对较新版本进行测试可能会导致意外地使用向后不兼容的特性或API。除了缺少的功能之外,最终的服务器版本很可能缺少重要的bug修复和安全性改进,并且将不再针对当前的驱动程序版本进行测试。
您的问题突出了MongoDB 2.4中不存在的两个特性的问题:
$sample聚合阶段,在MongoDB 3.2中添加。
我建议在应用程序代码中使用NPM包mongodb-collection-sample,作为对预3.2版本MongoDB进行抽样的一种解决办法。这将使用$sample (如果支持的话),或者对较早版本的MongoDB使用储层取样算法。unrecognized field "cursor"错误指示的。MongoDB 2.6+驱动程序默认使用游标来迭代大型结果集;旧版本仅限于内联结果(最多16 up)。您的Robomongo版本嵌入了比MongoDB 2.4更新的shell (您可以使用version()检查),并且似乎不支持aggregate()助手提供的2.4风格的聚合查询。可以通过db.runCommand()而不是aggregate()助手调用aggregate(),但是升级到受支持的服务器版本将是一种更好的方法。如果您是MongoDB新手,我肯定会鼓励您使用支持的版本(2017年3月时的MongoDB 3.0或更高版本),并在可能的情况下在开发和部署环境中使用相同的主要版本。
与MongoDB 3.4一样,Raspberry并不是官方支持的平台。然而,有一些其他人已经成功地使用了用于ArchLinux ARM的社区包。Raspberry Pi有限的硬件资源通常不适合进行大量繁重的工作,因此需要考虑的另一种方法是使用Pi运行Node应用程序,但连接到远程托管的数据库服务器。
发布于 2017-03-25 23:11:21
$sample可从v3.2中获得。
https://stackoverflow.com/questions/43022914
复制相似问题