[Synkroniseringsløsning for 2021 ]
Jeg ved, at det stillede spørgsmål var specifikt til MongoDB, men da dette er en gammel tråd, tænkte jeg, at læsere måske leder efter andre løsninger til nye apps eller genopbygninger. Jeg kan virkelig anbefale at tjekke AceBase ud fordi den gør præcis, hvad du ledte efter dengang.
AceBase er en gratis og open source realtidsdatabase, der muliggør nem lagring og synkronisering mellem browser- og serverdatabaser. Den bruger IndexedDB i browseren, sin egen binære db / SQL Server / SQLite-lagring på serveren. Offline redigeringer synkroniseres ved gentilslutning, og klienter får besked om fjerndatabaseændringer i realtid via en websocket (HURTIGT!).
Oven i dette har AceBase en unik funktion kaldet "live data proxyer", der giver dig mulighed for at få alle ændringer til objekter i hukommelsen til at blive vedholdt og synkroniseret til lokale og serverdatabaser, og fjernændringer til automatisk at opdatere dine objekter i hukommelsen. . Det betyder, at du helt kan glemme databasekodning og kode, som om du kun bruger lokale objekter. Uanset om du er online eller offline.
Det følgende eksempel viser, hvordan man opretter en lokal IndexedDB-database i browseren, hvordan man opretter forbindelse til en ekstern databaseserver, der synkroniserer med den lokale database, og hvordan man opretter en live dataproxy, der eliminerer yderligere databasekodning. AceBase understøtter også godkendelse og godkendelse, men jeg har udeladt det for nemheds skyld.
const { AceBaseClient } = require('acebase-client');
const { AceBase } = require('acebase');
// Create local database with IndexedDB storage:
const cacheDb = AceBase.WithIndexedDB('mydb-local');
// Connect to server database, use local db for offline storage:
const db = new AceBaseClient({ dbname: 'mydb', host: 'db.myproject.com', port: 443, https: true, cache: { db: cacheDb } });
// Wait for remote database to be connected, or ready to use when offline:
db.ready(async () => {
// Create live data proxy for a chat:
const emptyChat = { title: 'New chat', messages: {} };
const proxy = await db.ref('chats/chatid1').proxy(emptyChat); // Use emptyChat if chat node doesn't exist
// Get object reference containing live data:
const chat = proxy.value;
// Update chat's properties to save to local database,
// sync to server AND all other clients monitoring this chat in realtime:
chat.title = `Changing the title`;
chat.messages.push({
from: 'ewout',
sent: new Date(),
text: `Sending a message that is stored in the database and synced automatically was never this easy!` +
`This message might have been sent while we were offline. Who knows!`
});
// To monitor and handle realtime changes to the chat:
chat.onChanged((val, prev, isRemoteChange, context) => {
if (val.title !== prev.title) {
alert(`Chat title changed to ${val.title} by ${isRemoteChange ? 'us' : 'someone else'}`);
}
});
});
For flere eksempler og dokumentation, se AceBase realtime database engine på npmjs.com