我现在在 Heroku 上托管了一项服务,我正在使用 mLab 附加组件来确保部署的版本能够写入数据库等。我现在可以做什么?收到这封邮件后,我很困惑:
mLab 团队已选择停止使用此附加组件。mLab MongoDB 附加组件将于 2020 年 11 月 10 日从所有 Heroku 应用程序中删除。我们建议您在 2020 年 9 月 1 日之前通过仪表板或 CLI 自行删除 mLab MongoDB 附加组件。
有人有什么建议吗?我应该离开 Heroku 吗?如果使用 AWS 会更容易(不过我以前从未使用过 AWS)。
我想利用 mongoose 的withTransaction帮助程序,特别是它能够自动重试瞬时事务错误。然而,助手似乎withTransaction无法返回数据,这对我来说是一个问题。
我的代码看起来像:
import { startSession } from 'mongoose';
async addItem(itemData) {
const session = await startSession();
session.startTransaction();
try {
const item = await new Item({ itemData }).save({ session });
// a bunch of other async operations...
await session.commitTransaction();
session.endSession();
return item;
} catch (error) {
await session.abortTransaction();
session.endSession();
throw error;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能(1)使用withTransaction助手但仍然让这个函数像item当前一样返回 ,或者(2)通过除使用withTransaction.
根据 MongoDB 文档,事务仅适用于副本集,不适用于单个节点。为什么有这样的要求呢?在单个节点上进行交易不是比在分布式系统上更容易吗?
我在 Mac Sierra 上使用 Rails 6.1,并尝试安装Mongodb作为数据库,已经在 bash 和 gem 上安装了 mongo db 服务,但是当我输入时:
bin/rails g mongoid:config
Run Code Online (Sandbox Code Playgroud)
它显示以下错误:
Traceback (most recent call last):
26: from bin/rails:5:in `<main>'
25: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activesupport-6.1.0/lib/active_support/dependencies.rb:332:in `require'
24: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activesupport-6.1.0/lib/active_support/dependencies.rb:299:in `load_dependency'
23: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/activesupport-6.1.0/lib/active_support/dependencies.rb:332:in `block in require'
22: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
21: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
20: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
19: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
18: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
17: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/railties-6.1.0/lib/rails/commands.rb:18:in `<main>'
16: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/railties-6.1.0/lib/rails/command.rb:50:in `invoke'
15: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/railties-6.1.0/lib/rails/command/base.rb:69:in `perform'
14: from /Users/guilherme/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch' …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 mongodump 和 mongorestore 使用 MongoDB API 将数据从旧的 MongoDB 数据库服务器导出和导入到 Azure CosmosDB。但是我在连接到 CosmosDB 时遇到了问题。我正在使用带有 URI 标志的连接字符串。
我的 mongorestore 命令包括连接字符串如下:
mongorestore --uri="mongodb://$COSMOS_USERNAME:$COSMOS_PASSWORD@$COSMOS_HOST:$COSMOS_PORT/?maxIdleTimeMS=120000&retrywrites=false&appName=@$DB_NAME@&replicaSet=globaldb&ssl=true" --archive="$ARCHIVE_NAME"
该命令的错误消息是:
error restoring from archive 'testProdExport.archive': (BadValue) Retryable writes are not supported. Please disable retryable writes by specifying "retrywrites=false" in the connection string or an equivalent driver specific config.
正如您在连接字符串中看到的,我包含了 retrywrites=false URI 参数,但看起来 CosmosDB 无法识别该参数。
有没有人有类似的经历?
//编辑:我已经尝试并验证了连接字符串在 mongoose 连接以及 MongoDB Compass 中都有效。
我正在尝试打印使用“go.mongodb.org/mongo-driver/mongo”包创建的 mongodb 查询。是否有任何选项可以查看此包生成的查询或以任何方式转储它?我可以进入 mongod 实例并修改分析级别并查看来自 mongod 的查询,但这不是正确的方法。
mongodb ×6
transactions ×2
go ×1
heroku ×1
javascript ×1
macos-sierra ×1
mlab ×1
mongoid ×1
mongoose ×1
mongorestore ×1
node.js ×1