2016-06-09 16 views
1

Ich erlaube dem Benutzer, die Anmeldung zu überspringen oder sich mit dem FB anzumelden. Wenn sich der Benutzer anmeldet, erstelle ich einen Benutzer in der Benutzer-Sammlung unter Verwendung der FB-Profil-ID, und wenn er ihn überspringt, erzeuge ich immer noch seinen Benutzer unter Verwendung einer eindeutigen Client-ID. In der Client-App kann der Benutzer Artikel mit einem Lesezeichen versehen und mit dem Server synchronisieren. Der Benutzer kann sich später jederzeit über den FB einloggen. Sobald sich der Benutzer mit dem FB anmeldet, muss ich den Benutzer, der mit dem FB erstellt wurde, und den Benutzer, der mit der Client-ID erstellt wurde, zusammenführen, damit seine gespeicherten Daten perfekt abbilden.MongoDb: Wie Inhalte von zwei Dokumenten in MongoDB zusammenführen?

Was ich versucht habe:

Betrachten der Benutzeranmeldung übersprungen und ich erstellen Sie einen Benutzer in USER-Sammlung. Der Benutzer meldet sich mit dem FB zwischen der Laufzeit der App an und ich suche diese FB ID in meiner Sammlung. Wenn diese ID nicht existiert, aktualisiere ich das übersprungene Benutzerdokument mit der FB-ID. Falls vorhanden, füge ich Daten aus dem FB-Benutzerdokument in das übersprungene Benutzerdokument ein und lösche das FB-Benutzerdokument.

Eine andere Methode:

ich synchronisieren keine Lesezeichen auf den Server, bis der Benutzer anmeldet Sobald er sich anmeldet ich alle Daten auf einmal synchronisieren..

Was ist der effiziente Weg für diese Art von Operation?

+0

fusioniert Haben Sie zwei separate Sammlungen für FB-Benutzer und angemeldeten Benutzer? –

+0

Nein. Es ist die gleiche Sammlung .. – Praveen

+0

http://StackOverflow.com/Questions/11056632/2-Documents-merge-in-Mongodb – rkmax

Antwort

0

Wenn ich richtig verstanden habe, müssen Sie das Dokument mit der gleichen clientId finden, und fügen Sie ihm das Facebook-Benutzerdokument hinzu.

Sie können dies tun, mit Mongo Update-Befehl, $set verwendet, die das neue Dokument mit dem bestehenden Mongo Dokument https://docs.mongodb.com/manual/reference/operator/update/set/

so Ihr Code wie dieser

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 }) 

Das Ergebnis dieses wird verschmilzt aussehen würde das vorhandene Dokument mit allen Eigenschaften von facebookDocument

+0

$ set verbindet nie zwei Dokument – Praveen

+0

Es fügt die Eigenschaften aus dem übergebenen Dokument zu den vorhandenen Dokument, ist das nicht die Fusion, die Sie meinen? – Gaafar

+0

Dann sollte ich das andere Dokument manuell löschen? – Praveen

Verwandte Themen