我有一个用户模型,其中有一组令牌。每个令牌是具有三个键值对的对象。我只想用键'access'='auth'在令牌数组中保留一个令牌对象。我编写的代码无法正常工作。每次我运行该代码时,都会推送新令牌而不删除它键为'access'='auth'的现有对象。请提供帮助。
我的用户对象如下:-
{
"_id": "5badcc621818710a2a8fcafa",
"email": "example@gmail.com",
"password": "example",
"tokens": [
{
"_id": "5badcc661818710a2a8fcafb",
"access": "auth",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9."
},
{
"_id": "5badcf6b11a6610a9d5b3f52",
"access": "auth",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9."
},
{
"_id": "5badcf853776410aa7bdfaba",
"access": "auth",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9."
}
]
}
此函数被调用时,我正在将新对象推入令牌数组:-
userSchema.methods.genAuthToken = function () {
var token = jwt.sign(data, SECRET_KEY).toString();
var access = 'auth';
===> this.tokens.pull({access:'auth'}); //不工作
this.tokens.push({ access, token });
return this.save().then(() => token);
}
我想删除键“ access”的值为“ auth”的所有现有对象,然后推送新对象,然后保存用户对象。
答案 0 :(得分:0)
改为使用过滤器。下面的代码应该可以工作:
userSchema.methods.genAuthToken = function(){
var token = jwt.sign(data, SECRET_KEY).toString();
var access = 'auth';
this.tokens = this.tokens.filter(function(token){return token.access!=='auth'});
this.tokens.push({ access, token });
return this.save().then(() => token);
过滤器将删除所有具有与auth相同访问权限的对象。