mongoose 对象数组新增一条数据,相同则忽略

发布于 2022-09-11 23:11:52 字数 1393 浏览 27 评论 0

数据库中的一条文档长这样

{
    "_id" : ObjectId("5db65eb2a2f3a61fe88e162a"), 
    "devicesCxt" : [
        {
            "deviceId" : "1232", 
            "userAgent" : "PostmanRuntime/7.19.0", 
            "online" : false, 
            "_id" : ObjectId("5db65eb2a2f3a61fe88e162c"), 
            "loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
        }
    ], 
}

准备新增的对象长这样

{
    "deviceId" : "1232",  // 如果和数据库中相同则忽略,不新增,否则新增
    "userAgent" : "PostmanRuntime/7.19.0", 
    "online" : false, 
    "_id" : ObjectId("5db65eb2a2f3a61fe88e162c"), 
    "loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
}

假设新增一条 deviceId: 1233,如果和数据库中相同则忽略不新增,否则新增,最终结果如下

{
    "_id" : ObjectId("5db65eb2a2f3a61fe88e162a"), 
    "devicesCxt" : [
        {
            "deviceId" : "1232", 
            "userAgent" : "PostmanRuntime/7.19.0", 
            "online" : false, 
            "_id" : ObjectId("5db65eb2a2f3a61fe88e162c"), 
            "loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
        },
        {
            "deviceId" : "1233", 
            "userAgent" : "PostmanRuntime/7.19.0", 
            "online" : false, 
            "_id" : ObjectId("5db65eb2a2f3a61fe88e162c"), 
            "loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
        }
    ],
}

问题不太好描述,我找了一些update的方法,但是始终没能找到合适的,谢谢各位了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

为人所爱 2022-09-18 23:11:52
await userModel.update({
  _id: user._id,
  "devicesCxt.deviceId": { $ne: payload.deviceId }
}, {
  $push: {
    devicesCxt: {
      deviceId: payload.deviceId, 
      userAgent: ctx.request.header['user-agent'], 
      loginAt: now(), 
      online: true, 
    }
  }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文