gpt4 book ai didi

node.js - MongoDb 聚合出现错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:52 24 4
gpt4 key购买 nike

我一直在本地构建我的应用程序,一切正常,它使用最新的 MongoDB 3.4,并且我的聚合调用工作正常。

app.get('/random_menu', function (req, res) {
Menus.aggregate([{$sample: {size: 1}}], function (err, data) {
res.json(data);
});
});

我现在已将代码移至树莓派,该树莓派仅限于 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 还算陌生,因此我们将不胜感激。

最佳答案

MongoDB 2.4 于 2013 年 3 月首次发布,并于 2016 年 3 月终止生命(比 MongoDB 3.4.0 可用六个月)。针对较新版本的测试可能会导致意外使用向后不兼容的功能或 API。除了缺少的功能之外,停产的服务器版本可能缺少重要的错误修复和安全改进,并且将不再针对当前的驱动程序版本进行测试。

您的问题强调了 MongoDB 2.4 中不存在的两个功能的问题:

  • $sample聚合阶段,这是MongoDB 3.2中添加的。

    作为使用 MongoDB 3.2 之前版本进行采样的解决方法,我建议使用 NPM 包 mongodb-collection-sample 在您的应用程序代码中。这使用$sample如果支持或 reservoir sampling适用于旧版本 MongoDB 的算法。

  • 基于游标的聚合,这是 MongoDB 2.6 中添加的。

    这由 unrecognized field "cursor" 表示错误。 MongoDB 2.6+ 驱动程序默认使用游标来迭代大型结果集;旧版本仅限于内联结果(最多 16MB)。您的 Robomongo 版本嵌入了比 MongoDB 2.4 更新的 shell(您可以使用 version() 检查这一点),并且似乎不支持使用 aggregate() 的 2.4 样式聚合查询。 helper 。有另一种语法可以调用 aggregate 通过db.runCommand()而不是 aggregate()助手,但升级到受支持的服务器版本将是更好的方法。

如果您是 MongoDB 新手,我绝对鼓励使用受支持的版本(截至 2017 年 3 月的 MongoDB 3.0 或更高版本),并尽可能在您的开发和部署环境中使用相同的主要版本。

从 MongoDB 3.4 开始,Raspberry Pi 不是官方支持的平台。然而,有community packages for ArchLinux ARM其他人已经取得成功的。 Raspberry Pi 有限的硬件资源通常不适合做太多繁重的工作,因此考虑的替代方案是使用 Pi 运行 Node 应用程序,但连接到远程托管的数据库服务器。

关于node.js - MongoDb 聚合出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43022914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com