Alicia Brandon
Alicia Brandon

Reputation: 565

Mongodb/mongoose insert is not a function

My insert is not working, I got error of Error :

Token.insert is not a function

var Token = module.exports = mongoose.model('tokens', tokenSchema);

//error
module.exports.saveToken = function(owner_id, token, callback){
    console.log(owner_id,token);
    Token.insert({"owner":owner_id,"token":token},callback);
}
//working
module.exports.getAllTokens = function(owner_id, callback){
    Token.find({"owner":owner_id},callback);
}

Upvotes: 7

Views: 12346

Answers (3)

Sonu P.
Sonu P.

Reputation: 93

Here i defined what is the problem that why they did not find the insertMany

generally, we create an instance to save a document in DB like this :

const instance = new Model(data);

After then we hit the save query

instance.save(data).then().catch()

But when we talk about the insertMany Section, No need to create any instance. you can insert all entries directly via Model

eg.

Modal.insertMany(data).then().catch()

Upvotes: 1

num8er
num8er

Reputation: 19372

Check this code example, it should work as You need.

I don's see here any non-understanding part.

Ask questions in comments, I can explain if don't understand.

var tokenSchema = mongoose.Schema({
  owner: { 
    type: 'String',
    required: true,
    index: {
      unique: true
    }
  }, 
  token: {
    type: ['String'],
    default: []
  }
});

var Token = module.exports = mongoose.model('tokens', tokenSchema);

//save token, if token document exist so push it in token array and save
module.exports.saveToken = function(owner_id, token, callback){
    Token
      .findOne({owner: owner_id})
      .exec(function(err, tokenDocument) {
        if(tokenDocument) {
          if(tokenDocument.token.indexOf(token) > -1) { // found that token already exist in document token array
            return callback(null, tokenDocument); // don't do anything and return to callback existing tokenDocument
          }

          tokenDocument.token.push(token);
          tokenDocument.save(callback);
          return; // don't go down, cuz we already have a token document
        }

        new Token({owner: owner_id, token: [token]}).save(callback); // create new token document with single token in token array
    });
}

//get all tokens by owner_id
module.exports.getAllTokens = function(owner_id, callback){
    Token
      .findOne({owner: owner_id})
      .exec(function(err, tokenDocument) {
        callback(err, tokenDocument.token);
      });
}

Upvotes: 3

carlos
carlos

Reputation: 346

You can use:

let newvalue = new Token({"owner":owner_id,"token":token});
newvalue.save();

Upvotes: 1

Related Questions