Firebase API,用于将树分支从集合移动到另一个集合

在我的应用程序中,我需要将一个相当大的集合分支移动到另一个集合。 目前,我正在使用类似的东西:

srcRef .startAt(start) .endAt(end) .once('value', function(snap) { destRef.set(snap.exportVal()); }); 

很明显,这是相当昂贵的,所以我的问题是:为什么Firebase不提供一个简单的API? 喜欢:

 srcRef.moveTo(destRef); 

您可以使用Firebase CLI。

Firebase CLI与npm一起安装

 sudo npm install -g firebase-tools 

然后你可以执行命令来获取和设置数据:

 firebase data:get / -f "<my-firebase-app>" 

我有一个名为firebase-dot-files的个人项目 ,它创build了bash函数来执行常见的操作。 其中之一是传输数据。 在设置bash函数之后,您可以执行以下命令:

 transfer_to dev-firebase staging-firebase 

您也可以阅读这篇博文了解更多信息。

Firebase CLI作为npm模块

Firebase CLI也可以用于节点模块 。 这意味着你可以调用你通常的CLI方法,但作为函数。

这里是一个简单的数据:get命令:

 var client = require('firebase-tools'); client.data.get('/', { firebase: '<my-firebase-db>', output: 'output.json'}) .then(function(data) { console.log(data); process.exit(1); }) .catch(function(error) { console.log(error); process.exit(2); }); 

要传输数据,可以将data:get和data:set组合起来。

 function transfer(path, options) { var fromDb = options.fromDb; var toDb = options.toDb; var output = options.output; client.data.get(path, { firebase: fromDb, output: output }) .then(function(data) { return client.data.set(path, output, { firebase: toDb, confirm: true }); }) .then(function(data) { console.log('transferred!'); process.exit(1); }) .catch(function(error) { console.log(error); process.exit(2); }); } transfer('/', { fromDb: '<from>', toDb: 'to', output: 'data.json' });