无法使用猫鼬获取数据,即使我已经有了数据库和集合
Unable to fetch data using mongoose ,even when i have db and collection already in place
我在 mongoDB 的 userDetails dB 中有我的用户集合中的数据,数据方案如附图所示。
现在在节点端我写了下面的代码来使用猫鼬访问mongodb,这段代码被分成三个文件如下
MongoUtil.js
const urlMongo = "mongodb://localhost:27017"
const mongoose = require("mongoose");
client = async () => {
const newConn = await mongoose.createConnection(urlMongo,{ useUnifiedTopology:true,useNewUrlParser:true});
return await newConn.useDb('userDetails');
}
module.exports = {client}
然后我在模型中使用 util 文件如下
user.js
const mongoose = require('mongoose');
const mongoUtil = require('../mongoutil')
const { Schema } = mongoose;
const userSchema = new Schema({
email: String, // String is shorthand for {type: String}
userId: Number,
password:String,
});
const User = async () => {
const conn = await mongoUtil.client();
return conn.model('User',userSchema)
}
module.exports = User;
moongose.js
let User = require('./models/user');
getUserData = async() => {
const data = await User();
const userData = await data.find()
console.log(userData);
}
getUserData();
但是我总是无法获取任何数据returns[],我哪里做错了
您的问题在这里:
return conn.model('User',userSchema)
在 Mongoose documentation on models 中,您将看到以下内容:
The first argument is the singular name of the collection your model is for. Mongoose automatically looks for the plural, lowercased version of your model name.
因此,如果您想使用型号名称 'User',您应该将您的型号命名为 collection 'users',而不是用户
找到解决办法了,上面sully的回答描述了mongoose中出现复数化的问题,解决方法是创建schema时可以指定集合名
const userSchema = new Schema({
// collection: Student
"Id" : Number,
"Name" : String,
"Subject" : String,
"Marks" : Number
}, {collection: 'Student'});
我在 mongoDB 的 userDetails dB 中有我的用户集合中的数据,数据方案如附图所示。
现在在节点端我写了下面的代码来使用猫鼬访问mongodb,这段代码被分成三个文件如下
MongoUtil.js
const urlMongo = "mongodb://localhost:27017"
const mongoose = require("mongoose");
client = async () => {
const newConn = await mongoose.createConnection(urlMongo,{ useUnifiedTopology:true,useNewUrlParser:true});
return await newConn.useDb('userDetails');
}
module.exports = {client}
然后我在模型中使用 util 文件如下
user.js
const mongoose = require('mongoose');
const mongoUtil = require('../mongoutil')
const { Schema } = mongoose;
const userSchema = new Schema({
email: String, // String is shorthand for {type: String}
userId: Number,
password:String,
});
const User = async () => {
const conn = await mongoUtil.client();
return conn.model('User',userSchema)
}
module.exports = User;
moongose.js
let User = require('./models/user');
getUserData = async() => {
const data = await User();
const userData = await data.find()
console.log(userData);
}
getUserData();
但是我总是无法获取任何数据returns[],我哪里做错了
您的问题在这里:
return conn.model('User',userSchema)
在 Mongoose documentation on models 中,您将看到以下内容:
The first argument is the singular name of the collection your model is for. Mongoose automatically looks for the plural, lowercased version of your model name.
因此,如果您想使用型号名称 'User',您应该将您的型号命名为 collection 'users',而不是用户
找到解决办法了,上面sully的回答描述了mongoose中出现复数化的问题,解决方法是创建schema时可以指定集合名
const userSchema = new Schema({
// collection: Student
"Id" : Number,
"Name" : String,
"Subject" : String,
"Marks" : Number
}, {collection: 'Student'});