Search code examples
mongodbelasticsearchmongoosastic

Error while saving a Document in MongoDB while using plugin mongoosastic


my elastic search service working fine . And I am using mongoosastic for inserting in Elastic Search

This is the code I use

var mongoose = require('mongoose')
, mongoosastic = require('mongoosastic')
, Schema = mongoose.Schema

var User = new Schema({
name: String
, email: String
, city: String
})

var userModel=mongoose.model("userModel",User)

User.plugin(mongoosastic)

mongoose.connect("mongodb://localhost/myapp" ,function(err) {
if (err) throw err;

var user=new userModel()
user.name="Abhay"
user.save(function(err,user){
    console.log("err is ",err)
    console.log("user is ",user)
})
})

This produce this error

/home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:757
catch(err) { process.nextTick(function() { throw err}); }
^
TypeError: undefined is not a function
at model.postSave (/home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoosastic/lib/mongoosastic.js:398:9)
at EventEmitter. (/home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/lib/schema.js:749:17)
at EventEmitter.emit (events.js:129:20)
at model.Document.(anonymous function) as emit
at /home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/lib/model.js:268:13
at /home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/lib/model.js:127:7
at /home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/lib/collection.js:449:5
at /home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/lib/collection.js:593:5
at /home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/lib/bulk/unordered.js:457:9
at resultHandler (/home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/lib/bulk/unordered.js:409:5)
at /home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:756:13
at Callbacks.emit (/home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:95:3)
at null.messageHandler (/home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:243:23)
at Socket. (/home/abhay/Documents/project/webstrom/node/personal/mongo-node-elastic/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:262:22)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
at TCP.onread (net.js:538:20)

Note If I comment or remove User.plugin(mongoosastic) then Document save into collection successfully


Solution

  • You simply need to move User.plugin(mongoosastic) above the mongoose.model() line

    ...
    var User = new Schema({
    name: String
    , email: String
    , city: String
    })
    
    User.plugin(mongoosastic)          <---- move this line up here
    
    var userModel=mongoose.model("userModel",User)
    ...