我有一个数据库,它有一个结构。我已经清楚地更新了值,但想法仍然存在。我试图从本质上找到刷新令牌并使用新令牌更新它。下面是数据库结构示例
{
"_id": "64480569a2c60bc65d10b377",
"username": "markapiland@yahoo.com",
"refreshTokens": [
{
"refreshToken": "token_example_1",
"_id": "64480569a2c60bc65d10b37a"
}
],
"salt": "salted_stuff",
"hash": "hashed_stuff",
"__v": 1
}
下面是我的模式结构
const session = new Schema({
refreshToken: {
type: String,
default: '',
},
});
const userSchema = new Schema({
password: String,
refreshTokens: [session],
});
userSchema.set('toJSON', {
transform: function (doc, ret, options) {
delete ret.refreshToken;
return ret;
},
});
现在,我想做的是更新它
User.findOneAndUpdate(
{ _id: userId, refreshTokens: { $elemMatch: { refreshToken: refreshToken } } },
{ $set: { 'refreshTokens.$.refreshToken': newRefreshToken } }
);
newRefreshToken是从另一个函数构建的,userId是基于另一个内部检索函数的变量。这两个都是工作的,我已经安慰记录他们,可以看到他们是正确的。
当我检查数据库时,refreshToken在运行查询后没有改变。
我做错什么了吗?原始用户创建和一切工作正常,所以我知道连接在那里,它没有返回任何错误。即使这个更新也没有返回错误。只是没有更新数据。
我已经搜索了许多其他问题和论坛。我尝试了mongoplayground,它似乎工作,所以不知道为什么它实际上不工作。
我也试过
User.updateOne(
{ _id: userId, refreshTokens: { $elemMatch: { refreshToken: refreshToken } } },
{ $set: { 'refreshTokens.$.refreshToken': newRefreshToken } }
);
和
User.findOneAndUpdate(
{ _id: userId, 'refreshTokens.refreshToken': refreshToken } } },
{ $set: { 'refreshTokens.$.refreshToken': newRefreshToken } }
);
到目前为止还没有成功。如果我试着
.then((user) => {user.save()})
我得到一个错误,说这不是一个函数。
2条答案
按热度按时间vh0rcniy1#
我注意到你的原始代码中有两个额外的括号。修复如下:
也许代替
您可以尝试:
dbf7pr2w2#
对于任何遇到同样问题的人来说。..
最后我不得不设置。post为asyn函数,然后使用。等待加。exec()用于findOneAndUpdate函数,如下所示
这迫使数据库在创建新cookie和存储新令牌之前进行更新。