2016-06-09 128 views
1

我允許用戶跳過登錄或使用FB登錄。當用戶登錄時,我使用FB配置文件ID在用戶集合中創建用戶,當他跳過它時,我仍然使用一些唯一的客戶端ID創建他的用戶。在客戶端應用程序中,用戶可以爲文章添加書籤,並將其同步到服務器。用戶以後可以隨時使用FB登錄。一旦用戶使用FB登錄,我必須合併使用FB創建的用戶和使用客戶端ID創建的用戶,以便他存儲的數據完美映射。MongoDb:如何合併mongoDB中兩個文檔的內容?

我曾嘗試:

考慮用戶跳過登錄和創建用戶採集的用戶。 用戶在應用程序的生命週期之間使用FB登錄,我將在我的收藏中搜索此FB ID。如果這個ID不存在,我用FB ID更新跳過的用戶文檔。如果存在,我將把FB用戶文檔中的數據合併到跳過的用戶文檔中,並刪除FB用戶文檔。

另一種方法:

我不同步任何書籤到服務器,直到用戶登錄一次,他登錄我將立即同步所有的數據。

做這種手術的有效方法是什麼?

+0

對於FB用戶和登錄用戶,您是否有兩個單獨的集合? –

+0

不是,它是同一個集合.. – Praveen

+0

http://stackoverflow.com/questions/11056632/2-documents-merge-in-mongodb – rkmax

回答

0

如果我理解正確,您需要找到具有相同clientId的文檔,並在其中添加facebook用戶文檔。

你可以用蒙戈update命令做到這一點,利用$set它融合了現有蒙戈文檔的新文檔https://docs.mongodb.com/manual/reference/operator/update/set/

使你的代碼看起來像這樣

db.collection("users").update(
    // first parameter is mongo query to match based on clientId 
    { clientId: 100 }, 
    // second parameter is the document that will be merged using $set 
    { $set: facebookDocument }) 

這樣做的結果將是現有文檔合併了所有屬性facebookDocument

+0

$設置從不合並兩個文檔 – Praveen

+0

它將傳遞文檔中的屬性添加到現有文件,這是不是你的意思是合併? – Gaafar

+0

那我應該手動刪除其他文件嗎? – Praveen