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

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

{
    "_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的方法,但是始终没能找到合适的,谢谢各位了

阅读 3k
1 个回答
✓ 已被采纳新手上路,请多包涵
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, 
    }
  }
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题