有三个组成部分:
您可以单独或一起使用每个。这样你就可以
这一切都正确吗?(谢谢)
我正在尝试使用 Node.js 从 MongoDB Atlas 集合中读取数据。当我尝试阅读我收藏的内容时,出现错误MongoError: Cannot use a session that has ended。这是我的代码
client.connect(err => {
const collection = client
.db("sample_airbnb")
.collection("listingsAndReviews");
const test = collection.find({}).toArray((err, result) => {
if (err) throw err;
});
client.close();
});
Run Code Online (Sandbox Code Playgroud)
我能够查询特定文档,但我不确定如何返回集合的所有文档。我已经搜索了这个错误,我找不到太多关于它的信息。谢谢
我是 MongoDB 4.0.6 的新手,并尝试使用 Node/Express.js 将其实现到我的网站中,但是当我尝试连接时出现mongodb+srv://${process.env.MONGOUSER}:${process.env.MONGOPASS}@main-03xkr.mongodb.net/main此错误:
{ 错误:querySrv EREFUSED _mongodb._tcp.main-03xkr.mongodb.net at QueryReqWrap.onresolve [as oncomplete] (dns.js:199:19) errno: 'EREFUSED', code: 'EREFUSED', syscall: 'querySrv' , 主机名:'_mongodb._tcp.main-03xkr.mongodb.net' }
我试过连接到mongodb://localhost:27017/main,但这似乎确实有效。
这是相关的代码:
require('dotenv').config();
const mongoose = require('mongoose');
// Database
const uri = `mongodb+srv://${process.env.MONGOUSER}:${process.env.MONGOPASS}@main-03xkr.mongodb.net/main`;
const localURI = 'mongodb://localhost:27017/main';
var Project = require('./models/project');
mongoose.connect(uri, { useNewUrlParser: true });
const db = mongoose.connection;
db.once('open', () => console.log('Successfully connected to MongoDB'));
db.on('error', (e) => console.log(e));
// Routes
app.get('/', (req, res) => {
Project.find({}, (e, …Run Code Online (Sandbox Code Playgroud) 我正在使用 Python 3.9.5 和 PyMongo 3.11.4。我的MongoDB数据库的版本是4.4.6。我使用的是 Windows 8.1
我正在学习 MongoDB,并且在 Atlas 中设置了一个集群并连接到该集群。每当我尝试将文档插入集合中时,ServerSelectionTimeoutError都会引发 a ,并且在其括号内有几个[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate.
PyMongo 文档中的TLS 错误故障排除并没有太多帮助,因为它们只为 Linux 和 macOS 用户提供了提示。
值得一提的是,如果我tlsAllowInvalidCertificates=True在初始化时设置MongoClient,一切都会正常。这听起来不安全,虽然我正在开发一个小项目,但我仍然想养成良好的习惯,并且不要凌驾于任何现有的安全措施之上,所以我希望有一种替代方案。
从我所做的所有搜索来看,我猜测我丢失了某些证书,或者 Python 无法找到它们。我已经研究过这个certifi包,但是文档的这一部分看起来只有在我使用 Python 2.x 时才需要,但我不是。
所以是的,我现在有点陷入困境。
我正在尝试创建一个完整的应用程序,阅读以下教程:
我遵循了所有步骤,然后尝试运行:
node server.js
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
MongoDB 连接错误:MongoTimeoutError:服务器选择在 Timeout._onTimeout (C:\RND\fullstack_app\backend\node_modules\mongodb\lib\core\sdam\server_selection.js:308:9) 在 30000 毫秒后超时(内部/ timers.js:531:17) at processTimers (internal/timers.js:475:7) { name: 'MongoTimeoutError', reason: Error: connect ETIMEDOUT 99.80.11.208:27017 at TCPConnectWrap.afterConnect [as oncomplete] (net. js:1128:14) { name: 'MongoNetworkError', [Symbol(mongoErrorContextSymbol)]: {} }, [Symbol(mongoErrorContextSymbol)]: {} } (node:42892) UnhandledPromiseRejectionWarning: MongoTimeoutError: 服务器选择在 30000 毫秒后超时在 Timeout._onTimeout (C:\RND\fullstack_app\backend\node_modules\mongodb\lib\core\sdam\server_selection.js:308:9) 在 listOnTimeout (internal/timers.js:531:17) 在 processTimers (internal/timers.js:475:7)
我在 server.js 上的代码如下:
const mongoose = require('mongoose');
const router = express.Router();
// this is our MongoDB database
const dbRoute =
'mongodb+srv://user:<password>@cluster0-3zrv8.mongodb.net/test?retryWrites=true&w=majority';
mongoose.Promise = global.Promise;
// connects …Run Code Online (Sandbox Code Playgroud) 因此,我目前正在使用Web应用程序,并且需要数据库,因此我决定使用mongodb和mongoose。到目前为止,我已经在localhost上测试了所有内容,并且一切正常,但是我想将数据移至服务器。我听说过Atlas,并进行了注册并“上传”了数据。
现在,我想通过node.js应用程序连接到集群。
mongoose.connect('mongodb+srv://engllucas:p%40ssw0rd@insight-quhku.mongodb.net/test');
Run Code Online (Sandbox Code Playgroud)
我在连接您的应用程序点获得了mongodb Atlas网站的字符串
然后我交换了密码。
mongoose.connect('mongodb://engllucas:p%40ssw0rd@insight-quhku.mongodb.net/test');
Run Code Online (Sandbox Code Playgroud)
这也不起作用。
多数民众赞成在错误消息:
{ MongoError: failed to connect to server [insight-shard-00-02-quhku.mongodb.net:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 18.194.163.64:27017]
at Pool.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\topologies\server.js:503:11)
at emitOne (events.js:115:13)
at Pool.emit (events.js:210:7)
at Connection.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\connection\pool.js:326:12)
at Object.onceWrapper (events.js:318:30)
at emitTwo (events.js:125:13)
at Connection.emit (events.js:213:7)
at TLSSocket.<anonymous> (U:\WEBT\ProjectInsight\Quiz\node_modules\mongodb-core\lib\connection\connection.js:245:50)
at Object.onceWrapper (events.js:316:30)
at emitOne (events.js:115:13)
at TLSSocket.emit (events.js:210:7)
at emitErrorNT (internal/streams/destroy.js:64:8)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
name: 'MongoNetworkError',
Run Code Online (Sandbox Code Playgroud)
消息:“首次连接[MongoNetworkError:connect ECONNREFUSED 18.194.163.64:27017]”时,首次连接服务器[insight-shard-00-02-quhku.mongodb.net:27017]失败。拒绝(拒绝ID:1):MongoNetworkError:首次连接[MongoNetworkError:connect ECONNREFUSED 18.194.163.64:27017](节点:4920)时,无法连接到服务器[insight-shard-00-02-quhku.mongodb.net:27017] )[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零的退出代码终止Node.js进程。
我正在构建一个网站,并使用 MongoDB Atlas 作为我的数据库。在 MongoDB 网络访问部分中,我必须指定要连接的 IP 地址才能建立数据库连接,并且由于我使用云服务来运行我的服务器,所以我必须选择“允许从任何地方访问” " 选项,将 IP 地址设置为 0.0.0.0。除了选择此选项并仍然使用云 IDE 之外,还有其他选择吗?我假设允许从任何地方访问数据库是不安全的,尽管我也不知道在这种设置下其他人如何在没有源代码和/或我的 MongoDB Atlas 登录信息的情况下访问我的数据库并发布到它。
我创建了一个“品牌”集合,然后collation: { locale: "en", strength: 2}在“标题”字段上添加了一个索引。但是当我尝试使用此排序规则查询它时,它无法按预期工作:
const query = brand => mongodb.db("my-db").collection("brands")
.aggregate([
{ $match: { title: brand } },
{ $project: { _id: 0, total: 1, categories: { $slice: [ "$categories", 5 ] }, tags: { $slice: [ "$tags", 5 ] } } }
], { collation: { locale: 'en', strength: 2 } })
.asArray();
Run Code Online (Sandbox Code Playgroud)
所以调用brand('Test')会给出结果,但brand('test')给出一个空列表。
当我使用 Atlas Aggregation Builder 尝试相同的查询时,两个查询都会给出相同的(非空)结果。有任何想法吗?
我在MongoDB Atlas上设置了一个集群,并使自己成为管理员,但是我无法从shell连接到集群.在Atlas上,我单击了连接按钮,单击与Mongo Shell连接,下载了最新的Mongo Shell,并复制了命令以连接到群集:
mongo "mongodb://testcluster-shard-00-00-acqhf.mongodb.net:27017,testcluster-shard-00-01-acqhf.mongodb.net:27017,testcluster-shard-00-02-acqhf.mongodb.net:27017/test?replicaSet=TestCluster-shard-0" --authenticationDatabase admin --ssl --username <USERNAME> --password <PASSWORD>
Run Code Online (Sandbox Code Playgroud)
当我运行此命令时,我得到了流:
MongoDB shell version v3.4.10
connecting to: mongodb://testcluster-shard-00-00-
acqhf.mongodb.net:27017,testcluster-shard-00-01-
acqhf.mongodb.net:27017,testcluster-shard-00-02-
acqhf.mongodb.net:27017/test?replicaSet=TestCluster-shard-0
2017-11-20T11:58:31.883-0500 I NETWORK [thread1] Starting new replica set monitor for TestCluster-shard-0/testcluster-shard-00-00-
acqhf.mongodb.net:27017,testcluster-shard-00-01-
acqhf.mongodb.net:27017,testcluster-shard-00-02-acqhf.mongodb.net:27017
2017-11-20T11:58:32.119-0500 I NETWORK [thread1] Successfully connected to testcluster-shard-00-01-acqhf.mongodb.net:27017 (1 connections now open to testcluster-shard-00-01-acqhf.mongodb.net:27017 with a 5 second timeout)
2017-11-20T11:58:32.131-0500 I NETWORK [ReplicaSetMonitor-TaskExecutor-0] Successfully connected to testcluster-shard-00-00-acqhf.mongodb.net:27017 (1 connections now open to testcluster-shard-00-00-acqhf.mongodb.net:27017 with a 5 second timeout)
MongoDB server version: 3.4.10
2017-11-20T11:58:32.407-0500 …Run Code Online (Sandbox Code Playgroud) 我有一个MongoDB Atlas集群,我试图在同一个实例中复制数据库.不幸的是,每次我尝试运行db.copyDatabase()或copydb admin命令时,都会收到以下错误:
not authorized on admin to execute command
Run Code Online (Sandbox Code Playgroud)
这是非常奇怪的,因为我只有一个用户,并且它可以访问所有内容,至少就我在地图册上看到的一样(点击此处查看图像).
我在stackoverflow中进行了一些搜索,但看起来大多数答案都与本地运行的mongod实例有关,而不是在atlas中运行的那些...我是否设置了用户错误?
mongodb-atlas ×10
mongodb ×8
node.js ×4
mongoose ×3
cloud ×1
express ×1
pymongo-3.x ×1
python-3.x ×1
realm ×1
shell ×1
ssl ×1