我刚刚在Atlas上建立了一个免费的MongoDB.我添加了一个名为'react-project'的数据库,我正在尝试使用mongoose连接.这是我的连接字符串:
mongoose.connect('mongodb+srv://myUser:myPassword@myCluster.mongodb.net/react-project');
Run Code Online (Sandbox Code Playgroud)
如您所见,在查询结束时,我指定了要连接的数据库.我可以很好地连接到mongodb实例,但是当我尝试做一个操作(比如Model.find())时,我得到以下MongoError:
MongoError: cannot do raw queries on admin in atlas
Run Code Online (Sandbox Code Playgroud)
这让我相信它没有连接到'react-project'数据库,而是连接到'admin'数据库.
为什么会发生这种情况?如何连接到正确的数据库?
这是我正在运行的代码,它给了我错误:
var productSchema = mongoose.Schema({
productId: Number,
img: String,
price: Number,
title: String,
type: String
});
var Product = mongoose.model('Product', productSchema);
// Return all products
Product.find(function(error,result) {
if (error) return console.error(error);
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
我有完全相同的问题.看起来像是一个新的.
继承我现在有效的连接字符串
mongoose.connect('的mongodb:// USERNAME:PASSWORD @ myShard -shard-00-00-lbofd.mongodb.net:27017,myShard -shard-00-01-lbofd.mongodb.net:27017,myShard -shard-00 -02-lbofd.mongodb.net:27017/ MYDBNAME?ssl = true&replicaSet = myShard -shard-0&authSource = admin');
为了创建一个新的数据库,我使用了MongoDB Compass.从Atlas站点复制连接字符串(较长的一个 - 我认为是3.4),当你打开mongodb罗盘时,它会识别出你的剪贴板(OSX)中有一个连接字符串,并允许你用一个填充Compass的连接.简单点击.您可以从那里创建一个新数据库(单击左上角的MyCluster - 然后创建数据库.将新数据库的名称放在我的连接字符串中的粗体MYDBNAME中.
它确实需要一些刷新才能看到新数据.
我和你有很多相同的连接字符串(db name/shard different etc) - 我能够POST但不能GET.POSTS没有创建错误(但我找不到我发布的数据)和GET抛出了相同的错误.
小智 7
在尝试从我的付费 Mongo Atlas 集群切换回我的免费集群后,我刚刚收到此错误。我的解决方案最终非常简单:
在 URI 中,我更改/admin为空闲集群的 db 的名称,或者/test在我的情况下。
修复前的字符串:
"mongoURI": "mongodb+srv://<username>:<password>@cluster0-azhuz.mongodb.net/admin?retryWrites=true&w=majority"
Run Code Online (Sandbox Code Playgroud)
修复后的字符串:
"mongoURI": "mongodb+srv://<username>:<password>@cluster0-azhuz.mongodb.net/test?retryWrites=true&w=majority"
Run Code Online (Sandbox Code Playgroud)
有同样的问题,以上都没有帮助。记录我的解决方案,因为此页面是 Google 上的第一个热门页面。
如果您像我一样使用 connect-mongo 库,则可以使用旧的连接字符串(Node 2.2 而不是 Node 3.0)来修复它。要在 Atlas 中获得它,请单击您的集群 -> 连接 -> 连接您的应用程序 -> 在驱动程序下选择节点 v. 2.2 并复制该连接字符串。
这是因为 connect-mongo 无法处理较新字符串中的“+srv”。
所以那个字符串应该看起来像
mongodb://<user>:<password>@cluster0-shard-00-00-rnmsm.mongodb.net:27017,cluster0-shard-00-01-rnmsm.mongodb.net:27017,cluster0-shard-00-02-rnmsm.mongodb.net:27017/test?ssl=true&replicaSet=cluster0-shard-0&authSource=admin&retryWrites=true&w=majority
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4614 次 |
| 最近记录: |