Javascript 如何将firebase实时数据库功能转换为firestore功能

Javascript 如何将firebase实时数据库功能转换为firestore功能,javascript,google-cloud-firestore,google-cloud-functions,Javascript,Google Cloud Firestore,Google Cloud Functions,我以前编写的firebase实时数据库功能可以正常工作,但是,当我将数据库从实时数据库更改为firestore时,它现在不工作,我进行了一些转换,但我无法确定如何转换(.then…)部分。我想做的是,当用户状态字段在其文档中更改时,我希望函数在firestore数据库中查询并查找其他状态字段也在等待的ppl文档,然后随机选择其中一个,然后更改其文档值,如示例中所示 这是原始firebase实时数据库功能的一部分,它是 const functions = require('firebase-fun

我以前编写的firebase实时数据库功能可以正常工作,但是,当我将数据库从实时数据库更改为firestore时,它现在不工作,我进行了一些转换,但我无法确定如何转换(.then…)部分。我想做的是,当用户状态字段在其文档中更改时,我希望函数在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);
        }
    });
目前我正在

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) 
TypeError:无法读取未定义的属性“0”
在db.collection.where.get.then.result(/srv/index.js:31:24)

在而不是
返回结果.doc[0].ref.update()
您可能想要
返回结果.docs[0].ref.update()
。您缺少了一个“s”。

而不是
返回结果.doc[0]。ref.update()
您可能需要
返回结果.docs[0]。ref.update()
。您缺少了一个“s”。

Hi@Faruk确实,您可以使用
where
,返回特定的值。请你看一下这些箱子,看看是否对你有帮助?他们提供了一些如何使用云函数更新Firestore中文档的示例。嗨,Gabriel,谢谢你的页面,虽然它很有用,但它没有解决我所有的问题,我需要将结果限制为1个文档,它应该是随机的,而且目前它给了我发布的错误。Hi@Faruk确实,你可以使用
where
,返回特定的值。请你看一下这些箱子,看看是否对你有帮助?他们提供了一些如何使用云函数更新Firestore中的文档的示例。嗨,Gabriel,谢谢你的页面,虽然它很有用,但它没有解决我所有的问题,我需要将结果限制为1个文档,它应该是随机的,而且目前它给了我发布的faloowing错误。
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)