Nodejs中关于mongoose的问题

Nodejs中关于mongoose的问题

定义了一个model层访问的入口,代码如下:

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/user');

require('./user');
exports.User = mongoose.model('user');

定义了一个user 的model

var mongoose = require('mongoose');
 	var Schema = mongoose.Schema;

	var UserSchema = new Schema({
	  username: { type: String},
	  pwd: { type: String},
	  email: { type: String},
	  nickname: { type: String }
	});

mongoose.model('user', UserSchema);

然后我访问的时候代码i这样写的

	var UserModel = mongoose.User;
	UserModel.find({},function(err,user){
		if(err){
			logInfo.info(err.message);
		}else{
			res.render('test_user.html',{user:user}); 
		}
	})

可是最后显示的是插叙的user 数据集合中数据的个数是0,首先,我想问问,我的代码是否有地方写错了,然后如果没有的话,那就是mongoose d model是怎么和mongodb数据库中我的user 库中的user表关联起来的呢?


3 回复

Node.js 中关于 Mongoose 的问题

问题描述

你定义了一个 Model 层的入口,并且创建了一个 User 模型。但在实际访问时,发现从 MongoDB 数据库中查询到的数据集为空。

代码分析

  1. Model 入口文件

    var mongoose = require('mongoose');
    mongoose.connect('mongodb://127.0.0.1:27017/user');
    
    require('./user');
    exports.User = mongoose.model('user');
    

    这段代码连接到了本地 MongoDB 实例上的 user 数据库,并加载了 ./user.js 文件,其中定义了 User 模型。最后导出了 User 模型。

  2. User 模型定义

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    
    var UserSchema = new Schema({
        username: { type: String },
        pwd: { type: String },
        email: { type: String },
        nickname: { type: String }
    });
    
    mongoose.model('user', UserSchema);
    

    这里定义了一个 User 模型,包含 username, pwd, email, nickname 字段。

  3. 访问数据

    var UserModel = mongoose.User;
    UserModel.find({}, function (err, user) {
        if (err) {
            logInfo.info(err.message);
        } else {
            res.render('test_user.html', { user: user });
        }
    })
    

    在这里,你尝试通过 UserModel 查询所有用户数据。但是返回的结果为空。

问题排查

  1. 检查数据库连接 确保 MongoDB 服务正在运行,并且可以连接到指定的地址和端口 (mongodb://127.0.0.1:27017/user)。

  2. 模型名称 注意,Mongoose 默认会在模型名称后添加 “s” 构成集合名称。因此,如果你定义的模型名为 user,那么实际的集合名称应该是 users。修改模型定义如下:

    mongoose.model('User', UserSchema); // 更改模型名称为 'User'
    

    然后在访问数据时,使用正确的模型名称:

    var UserModel = mongoose.model('User'); // 使用 'User' 而不是 'UserModel'
    UserModel.find({}, function (err, users) {
        if (err) {
            logInfo.info(err.message);
        } else {
            res.render('test_user.html', { users: users });
        }
    });
    
  3. 确保数据已插入 确保已经向 users 集合中插入了一些数据。你可以使用 MongoDB Shell 或其他工具验证数据是否存在。

总结

  • 修改模型名称为 User
  • 使用正确的模型名称访问数据。
  • 确认数据库连接正常,并且数据已成功插入到 MongoDB 中。

希望这些步骤能帮助你解决问题!


mongoose帮你加个s所以你定义的user,在mongodb中应该是users

你的代码中存在一些问题。首先,在定义 User 模型时,你需要导出模型而不是只导出 mongoose 对象。其次,你访问模型的方式不正确。你应该通过 mongoose.model 来获取模型实例。以下是修改后的代码:

定义 User 模型

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserSchema = new Schema({
    username: { type: String },
    pwd: { type: String },
    email: { type: String },
    nickname: { type: String }
});

module.exports = mongoose.model('user', UserSchema);

定义模型层访问入口

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/user');

// 加载用户模型
require('./user');

module.exports = {
    User: mongoose.model('user')
};

访问模型

var User = require('./path/to/your/model/access/entry').User;

User.find({}, function(err, users) {
    if (err) {
        logInfo.info(err.message);
    } else {
        res.render('test_user.html', { user: users });
    }
});

解释

  1. 定义模型:使用 module.exports 导出 User 模型,这样其他模块可以引用它。
  2. 模型访问入口:在模型访问入口文件中,导入模型并导出模型实例。
  3. 访问模型:从模型访问入口文件中导入 User 模型,并使用 find 方法查询数据。

关联机制

mongoose.model('user', UserSchema) 这行代码将 UserSchemauser 集合关联起来。当你在 MongoDB 中创建 user 集合后,Mongoose 会自动使用 UserSchema 的字段验证和处理数据。

如果你发现查询结果为空,可能是因为 MongoDB 中没有数据或连接有问题。你可以检查 MongoDB 数据库中是否已经插入了数据。

回到顶部