[英]Unable to fetch data from mongodb- atlas?
我正在尝试使用我手动提供给服务器的 note.js 从 MongoDB-atlas 获取数据。
MongoDB-atlas 服务器上的集合状态为:
dbname:viit 集合名称:viit_atts
另外,我已将我的 id 列入白名单,并且能够连接到服务器。
我首先使用以下命令连接到服务器:
mongoose.connect("mongodb+srv://wimpy_cool:myPassWordGoesHere@cluster0-phqid.mongodb.net/test?retryWrites=true&w=majority",{},function(err,res)
{
if(err)
{
console.log("mongo lab server not connected");
console.log(err);
}
else
{
// console.log(res);
console.log("Connectd to mongolab db");
}
});
现在使用 mongoose 我已经声明了架构并制作了 model 然后使用查找 function 来获取数据。
var bodyParser = require('body-parser');
var mongoose =require("mongoose");
var express= require("express");
var app = express();
app.use(bodyParser.urlencoded({extended:true}));
mongoose.connect("mongodb+srv://wimpy_cool:myPassWordGoesHere@cluster0-phqid.mongodb.net/test?retryWrites=true&w=majority",{},function(err,res)
{
if(err)
{
console.log("mongo lab server not connected");
console.log(err);
}
else
{
// console.log(res);
console.log("Connectd to mongolab db");
}
});
var viit_att_schema = new mongoose.Schema({
name : String,
no_of_present: Number,
no_of_absent: Number
});
var att_history_schema = new mongoose.Schema({
time : String ,
att_stats : String,
});
var viit_att= mongoose.model("viit_att",viit_att_schema);
var att_history = mongoose.model("att_history",att_history_schema);
var list_of_all_members;
var list_of_all_members_sorted;
viit_att.find({},function(err,viit_atts)
{
if (err) {
console.log("OH NO ERROR");
}
else
{
console.log("fetching data now");
console.log(viit_atts);
list_of_all_members=viit_atts;
// console.log(list_of_all_members[0]);
// console.log(list_of_all_members);
list_of_all_members_sorted = list_of_all_members.sort(function(a,b) {
return b.no_of_present - a.no_of_present ;
});
console.log(list_of_all_members_sorted);
}
});
app.listen( process.env.PORT || 3000 , function(){
console.log("SERVER 3000 HAS STARTED");
});
但是提取似乎没有发生,控制台说:
D:\MY PROJECTS\WEB\club_attendence_website>node backend.js
(node:13076) DeprecationWarning: current URL string parser is deprecated,
and will be removed in a future version. To us
e the new parser, pass option { useNewUrlParser: true } to
MongoClient.connect.
SERVER 3000 HAS STARTED
Connectd to mongolab db
fetching data now
[]
[]
问题是 MongoDB atlas 的默认连接字符串有一个默认的数据库名称作为 test,并且会在集群中搜索相同的名称,因此即使它会连接,也不会获取任何内容。
要了解如何明确提及 dbName,请参阅此链接: Fail to connect Mongoose to Atlas
嗨我有同样的问题!
问题:我创建了一个mongoDb Atlas
集合,名称为“main”; 然而,当我连接我nodeJs
使用mongoose
,从回调集合名称变成了“电源”。
解决方案:我将模型名称更改为“mains”并且它起作用了。
试试这个: var viit_att= mongoose.model("viit_atts",viit_att_schema);
尝试这样做:
viit_att.find({}).then(content => {
console.log("data was fetched");
console.log(content);
list_of_all_members=content;
// console.log(list_of_all_members[0]);
// console.log(list_of_all_members);
list_of_all_members_sorted = list_of_all_members.sort(function(a,b) {
return b.no_of_present - a.no_of_present ;
});
console.log(list_of_all_members_sorted);
})
.catch(err => { console.log("OH NO AN ERROR") })
我遇到了同样的问题,对我有用的是在定义你的猫鼬模型时指定一个集合名称:
module.exports = mongoose.model('App', schema, COLLECTION_NAME)
其中COLLECTION_NAME
必须与 mongodb atlas 集合名称匹配。
对我来说,问题是我无法获取或获取数据,但与服务器建立了连接,我发现可能发生的几个问题是:-
您放入连接字符串中的文本必须是 url 编码,如 mongodb 文档中所述。
因此,如果您在连接字符串中输入的参数如数据库名称或密码,那么特殊字符是: /? # [ ] @
: /? # [ ] @
必须是 url 编码(也称为百分比编码),例如@
变为%40
。 您可以使用互联网上提供的一堆在线 url 编码器。
您必须添加发送数据库请求的计算机的 IP 地址。 您可以在连接的第一步中通过单击集群页面上的“连接”来执行此操作,也可以从此处添加 ip 地址。
我个人保持它可供所有人访问,因此添加了 ip 地址0.0.0.0/0
(包括您当前的 IP 地址)。
如果您将默认连接字符串粘贴到您的应用程序中,它将指向默认数据库test
。 您必须将 test 更改为您的数据库名称,或者如果没有写入任何内容,则必须编写您的数据库名称
因此,您的连接字符串应如下所示:-
mongodb+srv://<Your username>:<Your password>@cluster0.ezmvoas.mongodb.net/<Your db name>?retryWrites=true&w=majority
如果还有其他问题,您可以做的是将error
作为回调 function 的输入并尝试在控制台上记录error
。
const connectToMongo = () => {
mongoose.connect(mongoURI, (error, result) => {
console.log('Connected to MongoDB' + '\nError: ' + error);
});
}
通过这种方式,您无需尝试不同的方法就可以准确地修复错误消息。
希望这能解决问题,谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.