如何将 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)
第 2 步:删除 doc2 ( _id:2 )
db.collection.remove({_id:2})
了解您将如何关联或了解 doc1 与 doc2 的关联方式很有趣...
我有这个型号:
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)
第 2 步:删除 doc2 ( _id:2 )
db.collection.remove({_id:2})
了解您将如何关联或了解 doc1 与 doc2 的关联方式很有趣...