我有這個模型:
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: "[email protected]",
password: p4ssw0rd,
}]
}
這是 doc2,它沒有名字和姓氏,因為這些不是必需的:
{
accounts: [{
provider: "simple",
email: "[email protected]",
password: p4ssw0rd2,
}]
}
然后管理員可以合并,然后有這個:
{
name: "John",
lastName: "Doe",
accounts: [{
provider: "google",
email: "[email protected]",
password: p4ssw0rd,
},{
provider: "simple",
email: "[email protected]",
password: p4ssw0rd2,
}]
}
uj5u.com熱心網友回復:
我認為如下:
第 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 相關是很有趣的......
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/450007.html
