mongoose findOneAndUpdate基于文档的条件更新

yacmzcpb  于 2022-12-27  发布在  Go
关注(0)|答案(1)|浏览(162)

当一个用户通过SSO(如google登录)时,我希望找到或创建该用户,并且只在sessionId为空时设置一个新的sessionId。
因此,如果它是一个返回的用户,具有sessionId,我不想更改它。如果它没有sessionId,我想创建它。
伪码:

User.findOneAndUpdate(query, 
  { 
     ...data, 
     sessionId: userSessionId ? userSessionId : genSessionId()
  }
)

在单个DB调用中是否可能实现这一点?

wtlkbnrh

wtlkbnrh1#

您可以直接在filter本身中添加:

User.findOneAndUpdate(
  {
    ...query, // Your current filter 
    userSessionId: { $exists: false }
  }, 
  { 
     ...data, 
     sessionId: userSessionId ? userSessionId : genSessionId()
  }
)

这样,如果用户已有userSessionId属性,查询将不会更新它。

相关问题