2016-06-08 69 views
2

我插不工作,我得到了錯誤的錯誤:的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

回答

1

查看此代碼示例,它應該按照您的需要工作。

我不在這裏看到任何不理解的部分。

在評論中提問,我可以解釋是否不明白。

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

問題是,如果所有者相同,它仍然會創建另一組插入。如果所有者相同,只需推動令牌,不重複整個文檔,該怎麼辦? –

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() '。 –