【发布时间】:2020-10-26 08:25:59
【问题描述】:
我有一个我之前编写的有效的 firebase 实时数据库功能,但是当我将我的数据库从实时数据库更改为 firestore 时,它现在无法正常工作,我转换了一点,但我无法弄清楚如何转换 (.然后....)部分。我想做的是当用户状态字段在其文档中更改时,我希望该函数在firestore数据库中查询并查找状态字段也在等待的其他ppl文档并随机选择其中一个,然后更改其文档值如下例所示
这是原始firebase实时数据库功能的一部分,它是
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sayi = functions.database.ref("/users/{uid}/status").onWrite((change, context) => {
console.log("status degisti");
var rastgele = Math.floor(Math.random() * 2);
var status = change.after.val();
var user = change.after.ref.parent.key;
if (status ==="waiting") {
const events = admin.database().ref('users');
const query =events.orderByChild('status').equalTo('waiting').limitToFirst(2);
query.on("value",
function(data) {
var waitinggameusers = data.val();
var keys = Object.keys(waitinggameusers);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if(key!==user){
var updates = {};
updates["/users/"+user+"/rakip"] = key;
updates["/users/"+key+"/rakip"] = user;
updates["/users/"+user+"/rakipsallama"] = "";
updates["/users/"+key+"/rakipsallama"] = "";
updates["/users/"+user+"/status"] = "on";
updates["/users/"+key+"/status"] = "on";
updates["/users/"+user+"/turn"] = "off1";
updates["/users/"+key+"/turn"] = "off2";
admin.database().ref().update(updates);
return true;
}
}
}, sorunlu);
}
});
我当前的 Firestore 版本:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.yenisayi3 = functions.firestore.document('users/{userId}').onUpdate((change, context) => {
const newValue = change.after.data();
const previousValue = change.before.data();
const userdoc = context.params.userId;
if (newValue.status ==previousValue.status) {
console.log("status degismedi");
return true;
}else{
console.log("status degisti");
var status = newValue.status;
if(status==="off"||status==="on"||status==="win"){
return false;
}
if (status ==="waiting") {
return db.collection('users').where('status', '==', 'waiting').get().then(
result=>{
if (result.docs.length === 0) {
return false;
}else{
return result.doc[0].ref.update({
status: 'on',
});
}
});
}
}
});
目前我正在接受
TypeError: Cannot read property '0' of undefined
at db.collection.where.get.then.result (/srv/index.js:31:24)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
我的数据库布局是这样的:
【问题讨论】:
-
嗨加布里埃尔,感谢页面,虽然它很有用,但它并没有解决我所有的问题,我需要将结果限制为 1 个文档,它应该是随机的,目前它也给了我一个错误的错误已发布。
标签: javascript google-cloud-firestore google-cloud-functions