2016-06-09 105 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