数据库"/>
Mongoose findOneAndUpdate 没有更新数据库
我有一个具有此结构的数据库。我已经清楚地更新了这些值,但这个想法仍然存在。我试图从本质上找到刷新令牌并用新令牌更新它。这是数据库结构示例
{
"_id": "64480569a2c60bc65d10b377",
"username": "[email protected]",
"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 个额外的括号。修复如下:
{
"_id": "64480569a2c60bc65d10b377",
"username": "[email protected]",
"refreshTokens": [
{
"refreshToken": "token_example_1",
"_id": "64480569a2c60bc65d10b37a"
}
],
"salt": "salted_stuff",
"hash": "hashed_stuff",
"__v": 1
}
也许代替
User.findOneAndUpdate(
{ _id: userId, refreshTokens: { $elemMatch: { refreshToken: refreshToken } } },
{ $set: { 'refreshTokens.$.refreshToken': newRefreshToken } }
);
你可以试试:
User.findOneAndUpdate(
{ _id: userId, "refreshTokens.refreshToken": refreshToken },
{ $set: { 'refreshTokens.$.refreshToken': newRefreshToken } }
);
更多推荐
Mongoose findOneAndUpdate 没有更新数据库
发布评论