无法使用mongoose获取数据,即使我已经有了数据库和集合

wwwo4jvm  于 2022-11-13  发布在  Go
关注(0)|答案(3)|浏览(143)

第一次
我在mongoDB的userDetails dB中的User集合中有数据,数据方案如所附图像所示。
现在,在节点端,我已经编写了以下代码来使用mongoose访问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();

但我无法获得任何数据,它总是返回[],我哪里做错了

fykwrbwg

fykwrbwg1#

你的问题就在这里:

return conn.model('User',userSchema)

Mongoose documentation on models中,您将看到以下内容:
第一个参数是模型集合的单数名称,Mongoose会自动查找模型名称的小写复数形式。
因此,如果要使用模型名称“User”,则应将集合命名为“users”,而不是User

oknwwptz

oknwwptz2#

我找到了解决方案,萨利的上述回答描述了mongoose中出现的复数化问题。解决方法是在创建模式时指定集合名称

const userSchema = new Schema({
   // collection: Student
    "Id" : Number,
    "Name" : String,
    "Subject" : String,
    "Marks" : Number

  }, {collection: 'Student'});
ma8fv8wu

ma8fv8wu3#

尝试在模式的末尾使用复数形式的DB集合。如果代码中的所有内容都正确,它就解决了{}的问题。请查看以下代码片段以获取帮助:

const userModel = new Mongoose.model("userModel", userSchema);
module.exports = userModel;

相关问题