Petar D.
Petar D.

Reputation: 149

Can't insert into MongoDB with Mongoose

I'm trying to insert an object in MongoDB with Mongoose, but without success. In './models/user,js' I have:

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;

In './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;

I have tried few more ways to do it, but without result. Can someone help me?

Upvotes: 0

Views: 3009

Answers (1)

Paul
Paul

Reputation: 36319

You shouldn't be using whatever mongodb object you're creating in './db' to do this work, mongoose takes care of it for you. Try simplifying down to this:

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

Then in your controller code

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;

Somewhere in your app startup code (often in app.js or similar location) you'll want to call mongoose.connect(<connection url>), normally prior to setting up routes.

Note you can also call insert() explicitly, but it's a static method on the model object, like so:

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

Upvotes: 1

Related Questions