我正在创建一个iOS应用程序,以帮助收集小雕像的用户跟踪他们的小雕像并查看实时价格信息。
我有两个系列:
“主”集合
“用户”集合
目前,如果用户想要将新项目添加到他们的个人收藏中,他们会转到“主”收藏集UITableView并滑动以添加项目。项目文档基本上是从“主”集合中复制的,并且创建了用户子集合中的新文档。然后,他们可以转到显示他们添加的项目的UITableView。他们可以选择添加自己的商品信息,例如评论,购买日期,销售日期,购买价格等。
我的问题:如何在用户集合/子集合中的文档与主集合中的文档之间同步信息?说项目的“市场价格”已经上涨,所以我更新了主要的收集数据库。如何才能将此价格变化显示在所有用户的馆藏中?
我假设使用云功能,但我想在此处发布,以防有更简单的方法。
答案 0 :(得分:1)
这绝对是云功能的一个很好的用途。为/users{uid}/figurines/{figurineId}
集合创建onUpdate触发器,然后使用该触发器将更新的数据复制到主服务器。
您可以复制特定字段,也可以通过检查event.data.data()
和event.data.previous.data()
const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
exports.updateMaster = functions.firestore
.document('users/{uid}/figurines/{figurineId}')
.onUpdate(event => {
var newData = event.data.data();
var oldData = event.data.previous.data();
var updateData = {};
if (oldData.price != newData.price) {updateData.price = newData.price}
// Add any more changes that you may want to compare / update below...
// Then...
return db
.collection('master')
.doc(event.params.figurineId)
.update(updateData).then(response => {
console.log('We updated figurine', event.params.figurineId);
}).catch(err => {
console.error('There was an error', err);
});
});