我正在尝试使用手动输入到服务器的note.js从MongoDB地图集获取数据。
在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");
}
});
现在使用猫鼬,我已经声明了架构并创建了一个模型,然后使用find函数来获取数据。
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
[]
[]
答案 0 :(得分:0)
尝试这样做:
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") })
答案 1 :(得分:0)
嗨,我遇到了同样的问题!
问题:
我创建了一个mongoDb Atlas
集合名称为“ main”;但是,当我使用nodeJs
连接mongoose
时,回调中的集合名称将变成“ mains”。
解决方案: 我将模型名称更改为“ mains”,并且有效。
尝试一下:
var viit_att= mongoose.model("viit_atts",viit_att_schema);
答案 2 :(得分:0)
问题在于,MongoDB Atlas的默认连接字符串具有默认的数据库名称作为test,并且将在集群中搜索相同的名称,因此,即使它将进行连接,也不会获取任何内容。
为了学习如何明确提及dbName,请参考以下链接:Fail to connect Mongoose to Atlas
答案 3 :(得分:0)
我遇到了同样的问题,对我有用的是在定义你的猫鼬模型时指定一个集合名称:
module.exports = mongoose.model('App', schema, COLLECTION_NAME)
其中 COLLECTION_NAME
必须与 mongodb atlas 集合名称匹配。