这几天我一直在追踪这个问题,似乎我在网上找到的所有参考资料都过时了,不再相关,所以我非常感谢任何建议。
我有一个Firebase项目,它有一个实时数据库和云功能,可以监听该数据库并写回更改等。我最近在同一个项目中添加了第二个数据库(更接近用户群),这是第一个数据库的相同副本,但我发现云功能并不像预期的那样适用。(默认DB位于“us-central1”中,第二个DB位于“eurpoe-west1”中,如果有任何差异)
我发现此主题引用了相同的问题,但没有一个解决方案对我有用,并且引用的一些链接不再有效,因此我无法查看示例。如何在Cloud Functions for Firebase中访问多个实时数据库实例
我可以在第二个数据库中监听更改,在下面的示例中没有问题,
exports.exampleFunct = functions.region('europe-west1').database.instance('my_example-db-2').ref('/users/{uid}/requests/{request}').onCreate((req_snapshot, context) => {
//Do stuff in here. It works so far...
});
到目前为止,上述方法适用于第二个数据库,但是我无法使用 admin.database(.ref(.set)或 admin.database(.ref().)一次(...) 读/写第二个数据库。
例如,如果我想在上面的example pleFunct中使用此管理调用加载用户的整个节点。
admin.database().ref("users/" + uid).once("value", (user_snap) => {
//Will only load default database.
});
上面的方法将只读取我的项目中的默认数据库,而不是第二个数据库。
我已经尝试了上述函数的变体,将我的数据库URL、db名称等传递到数据库()参数中,正如我在网上找到的其他一些解决方案中看到的那样,但没有一个对我有用。根据云函数日志中错误的建议,我还尝试了在url中使用和不使用. Europe-West1引用。
>
admin.database(“my_example-db-2”).ref();
admin.database().instance(“my_example-db-2”).ref();
管理员数据库(”https://my_example-db-2.firebaseio.com).ref();
admin . database(" https://my _ example-d b-2 . Europe-west 1 . firebase database . app ")。ref();
admin.database(“my_example-db-2.火库数据库.app”)。
我还尝试在初始化时传入数据库url,如下所示。
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: 'https://my_example-db-2.europe-west1.firebaseio.com'//tried all variations of url.
});
我也尝试设置第二个这样的实例,
const db2 = admin.initializeApp({
databaseURL: "https://my_example-db-2.firebaseio.com"
}, 'db2');
...
admin.database(db2).ref();
但到目前为止,我无法读取/更新第二个数据库上的数据。
希望我没有说太多。我的代码还有很多其他包袱,所以我试图尽可能简化,如果有人能给我一些关于如何读取/写入第二个数据库的建议,我将不胜感激。我觉得我错过了一些非常明显的东西。
非常感谢。
##更新##
我也测试过希兰雅建议的方法,但没有成功。
admin.initializeApp();
const defaultDb = admin.database();
// Get a reference to another DB in the same project.
const otherDb = admin.app().database('https://otherdb.firebaseio.com');
如果我使用我的数据库https://my _ example-d b-2 . firebase database . app的url部署上述建议,我将在部署时得到一个错误,
Error: Error occurred while parsing your function triggers.
Error: FIREBASE FATAL ERROR: Cannot parse Firebase url. Please use https://<YOUR FIREBASE>.firebaseio.com
firebaseio.com不是我的数据库的域,但是如果我尝试https://my _ example-d b-2 . fire base io . com,它会部署得很好,但是当我在firebase控制台中测试函数和监控函数日志时,我看到它没有读取第二个数据库,并且也给出了这个警告。
[2021-02-18T11:47:41.596Z] @firebase/database: FIREBASE WARNING:
Namespace my_example-db-2 lives in a different region.
Please change your database URL to https://my_example-db-2.europe-west1.firebasedatabase.app (https://my_example-db-2.firebaseio.com)
我已经尝试了URL的所有变体,但没有成功,所以似乎这个解决方案不起作用。
你试过这样的事情吗:
// Initialize with the default DB URL (fetched automatically in Cloud Functions)
admin.initializeApp();
const defaultDb = admin.database();
// Get a reference to another DB in the same project.
const otherDb = admin.app().database('https://otherdb.firebaseio.com');
看见https://firebase.google.com/docs/reference/admin/node/admin.app.App-1#database
如果您试图写入触发事件的同一个数据库实例,您可以从传入函数的< code>snapshot中获取根引用:
exports.exampleFunct = functions.region('europe-west1').database
.instance('my_example-db-2')
.ref('/users/{uid}/requests/{request}')
.onCreate((req_snapshot, context) => {
const rootRef = req_snapshot.ref.root;
return rootRef.push("new value");
})
我正在尝试创建一个类似于以下内容的项目结构: 此外,我们希望避免使用require将所有函数拉到一个index.js文件中。
我在想,在下面描述的场景中使用RXJava是否值得。 一次检索包含一组所需条目的列表,例如特定列的表中查询/选择的结果集。 然后需要在另一个数据源中执行新的查询,以获取for循环中第一个列表中每个元素的相关属性(每个元素一行或多行)。 最后,将检索到的属性集写入csv文件。 例如,可以从数据库中检索公司列表,在本例中,是《财富》杂志中列出的第100个,并将100个对象存储在列表os字符串中。 然后
我是Spring批次的新手。我需要在spring批处理中实现的任务如下: 需要从数据库读取一些元数据。 基于此元数据,我需要读取一些文件。 经过一些处理后,需要将这些值从文件写入数据库。 我的查询如下: c.另外,基于某些条件,我可能需要调用第三组阅读器。如何在步骤中有条件地调用读取器? 谢谢你看了我的帖子。我知道它很长。非常感谢任何帮助。另外,我想一个示例代码片段会帮助我更好地理解这一点。:)
我正在尝试使用Firebase Cloud功能为iOS应用程序创建设备到设备推送通知。每当在数据库中的引用'/user-通知/{通知RecipientUid}/{挑战ID}'处创建新子节点时,我都想触发一个事件。这是我的index.js代码: 当在该位置的数据库中添加新的子数据库时,我收到此错误,“类型错误:函数.数据库.ref(...)。一次不是一个函数“,在 Firebase 控制台的函数日志
以下是我的Spring批处理用例。 > 处理记录。 将处理过的记录逐一写入。 我很清楚第2步和第3步的内容,但不知道如何实现一个可以一次性读取所有记录的读卡器。如何将记录逐一传递给项目处理者/编写者?我应该使用tasklet而不是reader/writer吗?
我需要在某个时间读取firebase数据库中的一个值。另外,即使数据库voteValue在以后的某个时候发生了变化,我也不希望读取值被更新。不过,如果它更容易,我想我会去它。 我的firebase数据库中有许多时隙--它们碰巧是以秒为单位的时间。我已经调用了这些时隙,我在每个时隙都有一个投票值。 所以在下面的例子中,假设时间是@11seconds。我想读到那个时段的投票值是8