找到一个元素,使用数据,然后将其删除

时间:2016-10-14 12:15:38

标签: javascript node.js mongodb mongoose

在我的node.js应用程序中,我正在实现“记住我”功能。到目前为止,一切都很顺利,但我有猫鼬的问题。我想做什么:我有一个名为Token的模型,使用此模式:

var TokenSchema = mongoose.Schema({
    token: { type: String },
    uid: { type: Schema.Types.ObjectId, ref: 'User' }
});

这只是一个将cookie令牌映射到UserId的小集合。然后我在这里有这个功能:

function consumeRememberMeToken(token, fn) {
  Token
  .findOne({ 'token': token }, (err, result) => {
    return (result===null)?fn(null, null):fn(null, result.uid);
  })
  .remove();
}

它应该做什么,是这样的:找到给定uid字符串的token并返回它(如果有结果)。 但此功能还应在返​​回uid后立即删除该条目。

目前,找到的令牌uid中的result被正确返回,但它(结果令牌)不会被上述代码从集合中删除。我不明白如何在获取它并使用检索到的uid后立即将其删除。我是函数式编程的新手,我不明白删除令牌的方式和位置。

2 个答案:

答案 0 :(得分:1)

您可以尝试db.collection.findOneAndDelete它会删除文档并返回已删除的数据,与您所说的完全相反,但基本上可以满足您的需求。 here是详细信息。

同样here是猫鼬的代表。

答案 1 :(得分:0)

 Token.findOne({ 'token': token }, (err, result) => {
   if(err || !result) return fn(err || "error", null);
   else{
      var uid = result.uid;
      result.remove(function(){
         return fn(null, uid);
      });
  }
})