如何将 2 个文档合并为一个文档并在此步骤后删除它们?

How could I merge 2 documents into one and delete them after this step?

我有这个型号:

const person = new Schema({
    name: String,
    lastName: String,
    accounts: [{
            provider: String,
            email: {
                type: String,
                lowercase: true
            }, 
            password: String, 
        }
    ]
})

然后一个用户先用Facebook注册,然后用电子邮件注册,现在数据库中有两个文件。但现在我想将这两个文档合二为一,这样用户就可以登录到同一个“帐户”,但使用不同类型的身份验证。

我的第一个选择是找到每个用户然后合并,添加到集合中然后删除旧的。但我认为这可能会导致长期问题

*更新*

这是文档 1:

   {
    name: "John",
    lastName: "Doe",
    accounts: [{
            provider: "google",
            email: "my@email.com", 
            password: p4ssw0rd, 
    }]
   }

这是 doc2,这没有名字和姓氏,因为这些不是必需的:

   {
    accounts: [{
            provider: "simple",
            email: "my2@email.com", 
            password: p4ssw0rd2, 
    }]
   }

然后管理员可以合并然后有这个:

       {
        name: "John",
        lastName: "Doe",
        accounts: [{
                provider: "google",
                email: "my@email.com", 
                password: p4ssw0rd, 
        },{
                provider: "simple",
                email: "my2@email.com", 
                password: p4ssw0rd2, 
        }]
       }

我看如下:

第 1 步:使用 doc1 和 doc2 的联合内容更新文档 doc1

var doc3=db.collection.aggregate([
{
$match: {
  _id: {
    $in: [
      1,
      2
    ]
   }
  }
 },
 {
  $unwind: "$accounts"
 },
 {
  $group: {
    _id: 1,
    name: {
      $first: "$name"
   },
    lastName: {
      $first: "$lastName"
   },
    accounts: {
      $push: "$accounts"
   }
 }
}
])
db.collection.save(doc3)

playground_step_1

第 2 步:删除 doc2 ( _id:2 )

 db.collection.remove({_id:2})

了解您将如何关联或了解 doc1 与 doc2 的关联方式很有趣...