Nodejs mongoose中schema的find方法总是报异常求指点

Nodejs mongoose中schema的find方法总是报异常求指点

部分代码如下: mongoose.connect(‘mongodb://localhost/todo_development’); var Schema = mongoose.Schema; var ObjectId = Schema.ObjectId; var tt = new Schema({ task:String });

app.get(’/tasks’,function(req,res){ tt.find({},function(err,docs){ res.render(‘tasks/index’,{ title:‘todos index vies’, docs:docs }); }) }); 总是报tt没有find方法,求指点这是怎么回事啊?


4 回复

在你提供的代码中,问题出在 tt 被定义为一个 Mongoose Schema 对象,而不是一个 Model 对象。Mongoose 的 Schema 对象本身并没有 find 方法,只有通过 Schema 创建的 Model 才有这些方法。

下面是修正后的代码示例,包括如何创建一个 Model 并使用它来查询数据库:

const mongoose = require('mongoose');
const express = require('express');

// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost/todo_development', { useNewUrlParser: true, useUnifiedTopology: true });

// 定义 Schema
const taskSchema = new mongoose.Schema({
    task: String
});

// 创建 Model
const Task = mongoose.model('Task', taskSchema);

// 创建 Express 应用实例
const app = express();

// 定义路由处理函数
app.get('/tasks', function (req, res) {
    // 使用 Model 的 find 方法查询数据
    Task.find({}, function (err, docs) {
        if (err) {
            console.error('Error querying the database:', err);
            return res.status(500).send('Internal Server Error');
        }
        res.render('tasks/index', {
            title: 'todos index view',
            docs: docs
        });
    });
});

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 定义 Schema:

    const taskSchema = new mongoose.Schema({
        task: String
    });
    

    这里我们定义了一个 taskSchema,它描述了存储任务数据的结构。

  2. 创建 Model:

    const Task = mongoose.model('Task', taskSchema);
    

    使用 mongoose.model 方法根据 taskSchema 创建一个名为 Task 的 Model。这个 Model 可以用来与数据库交互,执行增删改查等操作。

  3. 使用 Model 查询数据库:

    Task.find({}, function (err, docs) {
        ...
    });
    

    在路由处理函数中,我们使用 Task.find() 方法来查找所有任务,并将结果传递给渲染函数。

这样修改后,你的应用应该能够正确地从 MongoDB 中查询数据,并且不会再出现 tt 没有 find 方法的错误。


exports.User=mongoose.model(‘User’,UserSchema);//与users表关联

User.find=function(email,callback){ User.count }

你有没有关联呢

根据你提供的代码片段,问题出在tt被定义为一个Mongoose schema,而不是一个模型。find方法是Mongoose模型上的方法,而不是schema本身。

你需要先使用schema来创建一个模型,然后通过模型实例来调用find方法。以下是修改后的代码示例:

// 引入mongoose模块
const mongoose = require('mongoose');

// 连接到MongoDB数据库
mongoose.connect('mongodb://localhost/todo_development', { useNewUrlParser: true, useUnifiedTopology: true });

// 定义Schema
var taskSchema = new mongoose.Schema({
    task: String
});

// 创建Model
var Task = mongoose.model('Task', taskSchema);

// 在路由中使用Model
app.get('/tasks', function (req, res) {
    // 通过模型来调用find方法
    Task.find({}, function (err, docs) {
        if (err) {
            console.error('Error finding tasks:', err);
            return res.status(500).send('Internal Server Error');
        }
        res.render('tasks/index', {
            title: 'todos index view',
            docs: docs
        });
    });
});

解释

  1. Schema:定义了数据结构和验证规则。
  2. Model:基于Schema创建的Model类,用于对数据库进行CRUD操作。
  3. Task.find({}):这里使用了Task模型来查找所有的任务记录。

确保你已经正确安装了mongoose模块,并且正确连接到了MongoDB数据库。如果问题仍然存在,请检查错误信息以获取更多线索。

回到顶部