我有一个数据库,它有一个这样的 struct .我已经清楚地更新了值,但 idea 仍然存在.实际上,我正在try 找到刷新令牌并使用新令牌更新它.以下是数据库 struct 示例
{
"_id": "xxxxxxxxxxxxxxxxx",
"username": "abcd@yahoo.com",
"refreshTokens": [
{
"refreshToken": "token_example_1",
"_id": "xxxxxxxxxxxxxxxxx"
}
],
"salt": "salted_stuff",
"hash": "hashed_stuff",
"__v": 1
}
以下是我的架构 struct
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 } }
);
新的刷新令牌是从另一个函数构建的,而userid是一个基于另一个内部检索函数的变量.正如我所安慰的那样,这两个都在工作,我已经记录了它们,并且可以看到它们是正确的.
当我判断数据库时,在运行查询之后,renhToken没有改变.
我是不是做错了什么?最初的用户创建和一切都运行得很好,所以我知道连接在那里,它不会返回任何错误.即使是这次更新也没有返回错误.它只是没有更新数据.
我已经搜索了多个其他问题和论坛.我试过了,它似乎起作用了,所以我不确定为什么它实际上不起作用.
我也试过了
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()})
我收到一个错误,说这不是一个函数.