的MongoDB /猫鼬插入不是一个函数

问题描述:

我插不工作,我得到了错误的错误:的MongoDB /猫鼬插入不是一个函数

Token.insert不是一个函数

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); 
} 
+1

是在此文件中定义的“Token”?它是如何传递给它的 –

+0

@MukeshSharma更新了我的问题 –

+0

请添加tokenSchema定义,并键入确切的问题。你说的是:Token.insert不是一个函数。我们 - 帮助您解决问题,但在得到该解决方案后,您需要将令牌插入令牌数组中。所以请解决你的问题。 – num8er

查看此代码示例,它应该按照您的需要工作。

我不在这里看到任何不理解的部分。

在评论中提问,我可以解释是否不明白。

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); 
     }); 
} 
+1

这不起作用,忘记提及我的模式令牌是一个数组。像这样的'变种tokenSchema = mongoose.Schema({ “所有者”:{ \t类型:字符串 }, “令牌”:[] });' –

+0

你不是架构中提到的任何地方。查看我的回答中的新更改 – num8er

+0

问题是,如果所有者相同,它仍然会创建另一组插入。如果所有者相同,只需推动令牌,不重复整个文档,该怎么办? –

您可以使用:

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

'save'与插入verus创建有什么不同? –

+1

我查了一下mongoose文档,它没有插入api – carlos

+0

Mongoose没有插入API,因为这是本地API,我猜'Model.create()'代替了'Model.insert() '。 –