无法使用Mongoose插入MongoDB

时间:2017-07-17 17:21:46

标签: node.js mongodb mongoose

我正在尝试使用MongoDBMongoose中插入一个对象,但没有成功。 在'./models/user,js'中我有:

var mongoDatabase = require('./db'); //I've connected to localhost here
var database = mongoDatabase.getDb();
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
  user: String,
  adress: String,
});

userSchema.methods.testmethod = function(){
  console.log('test');
}
userSchema.methods.insert = function (obj) { //this works but what is the point to use Mongoose If I do it that way
  database.collection("users").insertOne(obj, function(err, res) {
        if(err) throw err;
        console.log("1 record inserted");
    });
}
var User = mongoose.model('User', userSchema);
module.exports = User;

在'./controllers/user.js'

var express = require('express');
var router  = express.Router();
var User    = require('../models/user');

router.post("/", function(request, response) {  
    var obj = new User({
        user: request.body.name,
        adress: request.body.adress,
    });

    obj.testmethod(); //works fine
    obj.insert(obj); //throws an error

    User.insertOne(obj, function(err, res) { //error: insertOne is not a function
        if(err) throw err;
        console.log("1 record inserted");
    }); 
});
module.exports = router;

我尝试了几种方法,但没有结果。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

你不应该使用你在' ./ db'中创建的任何mongodb对象。做这项工作,猫鼬为你照顾它。尝试简化到这个:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
  user: String,
  adress: String,
});
module.exports = mongoose.model('User', userSchema);

然后在您的控制器代码中

var express = require('express');
var router  = express.Router();
var User    = require('../models/user');

router.post("/", function(request, response, next) {  
    var user = new User({
        user: request.body.name,
        adress: request.body.adress,
    });

    user.save(function(err, u) {
        if (err) return next(err);
        return res.json(u);
    });
});
module.exports = router;

在您的应用启动代码中的某个位置(通常位于app.js或类似位置),您通常需要在设置路线之前拨打mongoose.connect(<connection url>)

请注意,您也可以明确地调用insert(),但它是模型对象的静态方法,如下所示:

User.insert({user: 'bob', address: 'somewhere, nh'}, cb)