我是使用 Spring Boot 的 Mongodb 新手。我有 MONGODB ATLAS URI 连接字符串
mongodb://userName:<PASSWORD>@icarat-shard-00-00-7lopx.mongodb.net:27017,icarat-shard-00-01-7lopx.mongodb.net:27017,icarat-shard-00-02-7lopx.mongodb.net:27017/<DATABASE>?ssl=true&replicaSet=icarat-shard-0&authSource=admin
Run Code Online (Sandbox Code Playgroud)
然后在我的 Spring Boot 应用程序中,我在 application.properties 中设置了 uri,例如
spring.data.mongodb.uri: mongodb://userName:*****@icarat-shard-00-00-7lopx.mongodb.net:27017,icarat-shard-00-01-7lopx.mongodb.net:27017,icarat-shard-00-02-7lopx.mongodb.net:27017/vehicleplatform?ssl=true&replicaSet=icarat-shard-0&authSource=admin
Run Code Online (Sandbox Code Playgroud)
这个存储库接口
public interface OrganizationRepository extends MongoRepository<Organization, String> {
}
Run Code Online (Sandbox Code Playgroud)
当我注入 OrganizationRepository 接口时,它显示这样的错误
无法实例化 [com.mongodb.MongoClient]:工厂方法 'mongo' 抛出异常;嵌套异常为 java.lang.IllegalArgumentException:连接字符串包含无效的用户信息。如果用户名或密码包含冒号 (:) 或 at 符号 (@),则必须对其进行 urlencoded
这是我的文档类
@Document(collection="Organization")
public class Organization {
@Id
String id;
String orgName;
String orgAddress;
String pinCode;
//getter
//setter
}
Run Code Online (Sandbox Code Playgroud)
这是我的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.icarat</groupId>
<artifactId>vehicleplatform</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>vehicleplatform</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath/> …Run Code Online (Sandbox Code Playgroud) 在一个工作生产应用程序连接到本地 mongo 之后,我们决定转移到Mongo Atlas. 这导致了生产错误。
Our stack is docker -> alping 3.6 -> python 2.7.13 -> Flask -> uwsgi (2.0.17) -> nginx running on aws
flask-mongoengine-0.9.3 mongoengine-0.14.3 pymongo-3.5.1
Run Code Online (Sandbox Code Playgroud)
在 中启动应用程序时staging/production,uwsgi正在发送No replica set members found yet.
我们不知道为什么。
我们尝试了不同的连接设置connect: False,这是延迟连接,这意味着不是初始化,而是第一次查询。它导致 nginxresource temporarily unavailable在我们的某些应用程序上因错误而失败。我们不得不多次重新启动应用程序才能最终开始服务请求。
我认为问题出在 pymongo 以及它不是fork-safe
http://api.mongodb.com/python/current/faq.html?highlight=thread#id3
并且uwsgi正在使用叉子的事实
我怀疑这可能与我的应用程序的初始化方式有关。可能由 aginst Using PyMongo with Multiprocessing 这里是应用程序初始化代码:
from app import FlaskApp
from flask import current_app
app = None
from …Run Code Online (Sandbox Code Playgroud) 我在哪里可以找到 MongoDB atlas 中的副本集名称,因为我一直收到这个:
MongoError:种子列表不包含 mongos 代理,replicaset 连接需要在 URI 或选项对象中提供参数 replicaSet,mongodb://server:port/db?replicaSet=name
我试图从蒙戈DB节点JS司机蒙戈DB阿特拉斯M0实例进行交易(如描述在这里),我收到以下错误:
code:8000
codeName:"AtlasError"
errmsg:"internal atlas error checking things: Failure getting dbStats: read tcp 192.168.254.78:50064->192.168.254.78:27000: i/o timeout"
message:"internal atlas error checking things: Failure getting dbStats: read tcp 192.168.254.78:50064->192.168.254.78:27000: i/o timeout"
name:"MongoError"
Run Code Online (Sandbox Code Playgroud)
我已经搜索了一段时间,但找不到有关如何解决此问题的任何线索。
附加信息:
将第二个操作添加到事务后,将引发该错误。
如果我删除所有其他操作,而只留下一个(
无关紧要),则工作正常。
如果我更改操作顺序(更改为任何顺序),则错误
仍在添加第二个操作上。
如果所有操作都在同一个数据库和集合上执行,则工作正常
我的代码:
async function connect () {
if (dbClient !== null && dbClient.isConnected()) {
console.log('Reusing db connection => ' + JSON.stringify(dbClient));
} else {
console.log('Connecting to database');
dbClient = await MongoClient.connect(url, { useNewUrlParser: true });
console.log('Successfully connected to database');
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 django 将我的 django 实例连接到 mongo db 集群。我已经从各种来源进行了检查,它越来越接近工作的方式是:
DATABASES字典settings.pyDATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'test',
'HOST': 'mongodb+srv://mongo_usr:' + urllib.parse.quote('mypassword') + '@domain_assigned.mongodb.net/test?ssl=true&ssl_cert_reqs=CERT_NONE&retryWrites=true',
'ENFORCE_SCHEMA': False
}
}
Run Code Online (Sandbox Code Playgroud)
它确实找到了端点,但我收到了一个奇怪的错误:
pymongo.errors.ServerSelectionTimeoutError: connection closed,connection closed,connection closed
有没有人解决过这个问题?
我正在尝试从运行在弹性 beantalk 上的服务连接到托管在 mongo atlas 上的数据库。我收到错误:
UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [youmaylike-shard-00-01-necsu.mongodb.net:27017] on first connect [MongoNetworkError: connection 5 to youmaylike-shard-00-01-necsu.mongodb.net:27017 closed]
我相信这种情况正在发生,因为我的服务的 IP 地址没有在地图集上列入白名单。我不确定如何获取我的服务的 IP 地址,我尝试运行eb ssh但我不确定它给我的是正确的值
我正在学习 Mongodb 大学 M103 课程,在那里他们简要概述了集群和副本集是什么。根据我的理解,集群是一组服务器或节点。副本集是一组服务器或节点,所有这些服务器或节点都内置了复制机制,用于停机访问和更快的读取操作。
从这点看来,副本集是一种特定类型的集群,但我的困惑来自 MongoDB Atlas。在 mongoDB atlas 中,必须创建一个集群,这也是一个副本集吗?
这些术语在所有情况下都可以互换吗?
我正在使用 Mongodb Atlas,需要获取最后 10 条记录。为此,必须应用具有排序和限制选项的过滤器。在 mongo shell 中,我们是这样做的:
db.category.find().sort( { name: 1 } ).limit( 5 )
Run Code Online (Sandbox Code Playgroud)
或者
db.category.find().limit( 5 ).sort( { name: 1 } )
Run Code Online (Sandbox Code Playgroud)
如何使用 Mongodb Atlas 控制台的过滤器选项来获得所需的结果?我没有找到任何有关此的文档,是否在某处记录了如何使用过滤器选项?
有一些问题1、2谈论MongoDB警告,但是,我的问题是另一种情况。Query Targeting: Scanned Objects / Returned has gone above 1000
我们文档的架构是
{
"_id" : ObjectId("abc"),
"key" : "key_1",
"val" : "1",
"created_at" : ISODate("2021-09-25T07:38:04.985Z"),
"a_has_sent" : false,
"b_has_sent" : false,
"updated_at" : ISODate("2021-09-25T07:38:04.985Z")
}
Run Code Online (Sandbox Code Playgroud)
该集合的索引是
{
"key" : {
"updated_at" : 1
},
"name" : "updated_at_1",
"expireAfterSeconds" : 5184000,
"background" : true
},
{
"key" : {
"updated_at" : 1,
"a_has_sent" : 1,
"b_has_sent" : 1
},
"name" : "updated_at_1_a_has_sent_1_b_has_sent_1",
"background" : true
}
Run Code Online (Sandbox Code Playgroud)
之后的文档总数2021-09-24 …
我在 Mongo Atlas“访问历史记录”视图中收到以下随机消息:
\n“BadValue 失败:SCRAM-SHA-256 身份验证已禁用”
\n此消息附加到我在 AWS 托管的应用程序 IP。我基本上首先收到此消息,然后在同一时间戳收到成功消息。
\n连接到 Mongo 时会出现这个问题吗?
\nmongodb-atlas ×10
mongodb ×8
mongoose ×2
django ×1
djongo ×1
indexing ×1
pymongo ×1
python ×1
replicaset ×1
spring-boot ×1
uwsgi ×1