gpt4 book ai didi

javascript - 将数据从 mongoDB 同步到 firebase,反之亦然

转载 作者:IT老高 更新时间:2023-10-28 13:28:24 26 4
gpt4 key购买 nike

我现在的情况:

我已经使用 React、NodeJS 和 Electron 创建了一个应用程序。大多数用户是一种离线用户。他们离线使用我的应用程序。

下一步计划:

现在,我正计划为他们创建一个移动应用程序。我计划使用 React-Native 创建该应用程序。

由于他们的数据库处于离线状态,我计划在桌面应用程序中为他们提供 sync to firebase 按钮​​。当他点击 sync to firebase 按钮​​ 时,他们本地 mongodb 中的数据应该与 firebase 同步。

我的想法:

  • 当一条新记录添加到 mongodb 时,我将使用该记录存储一个新键,如下所示:new: true
  • 当记录更新时,我将存储一个名为 updated: true
  • 的键
  • 同样适用于删除...

然后当用户按下 Sync to firebase 时,我将搜索这些记录并在 firebase 上添加/更新/删除相应的记录,然后我将从 mongodb 数据库中删除这些键。

执行我的想法时遇到的问题:

一开始我觉得这不是一件好事,因为我认为这很耗时,因为我将在 firebase 和 mongodb 上执行操作。

这种方法的另一个问题是,如果我反过来想,当用户从 React-Native 应用程序添加/更新/删除记录时,firebase 将让这些键行新/更新/删除,然后当用户按下桌面应用程序中的同步按钮,我将不得不做同样的事情,但相反。

还有一个问题是,如果用户不小心卸载了我的应用,然后又重新安装了,我该怎么办?

最大的问题是管理所有的事情。

我的期望:

所以,我想要一种干净且可维护的方法。有没有人知道如何将数据从 mongodb 同步到 firebase,反之亦然?

最佳答案

两个数据库系统都支持某种操作日志或触发系统。您可以使用这些实时更新对数据库的更改,以几乎实时同步它们。

对于 MongoDB

您可以使用 Oplog查看对数据库进行了哪些更改(插入/更新/删除)并运行合适的函数来同步 firebase。

oplog

A capped collection that stores an ordered history of logical writes to a MongoDB database. The oplog is the basic mechanism enabling replication in MongoDB.

有一些小型库可以帮助您轻松订阅这些事件。

示例(mongo-oplog)

import MongoOplog from 'mongo-oplog'
const oplog = MongoOplog('mongodb://127.0.0.1:27017/local', { ns: 'test.posts' })

oplog.tail();

oplog.on('op', data => {
console.log(data);
});

oplog.on('insert', doc => {
console.log(doc);
});

oplog.on('update', doc => {
console.log(doc);
});

oplog.on('delete', doc => {
console.log(doc.o._id);
});

对于 Firebase

您可以使用 Cloud Functions .使用 Cloud Functions,您可以观看 Cloud Firestore Triggers 等触发器或 Realtime Database Triggers并运行一个函数来同步 MongoDB 数据库。

With Cloud Functions, you can handle events in the Firebase Realtime Database with no need to update client code. Cloud Functions lets you run database operations with full administrative privileges, and ensures that each change to the database is processed individually.

// Listens for new messages added to /messages/:pushId/original and creates an
// uppercase version of the message to /messages/:pushId/uppercase
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original').onWrite((event) => {
// Grab the current value of what was written to the Realtime Database.
const original = event.data.val();
console.log('Uppercasing', event.params.pushId, original);
const uppercase = original.toUpperCase();
// You must return a Promise when performing asynchronous tasks inside a Functions such as
// writing to the Firebase Realtime Database.
// Setting an "uppercase" sibling in the Realtime Database returns a Promise.
return event.data.ref.parent.child('uppercase').set(uppercase);
});

关于javascript - 将数据从 mongoDB 同步到 firebase,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49457900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com