首页 > 解决方案 > OrderBy + foreach + dataRef 在 Firestore/Firebase 中不起作用

问题描述

[已编辑] 更正错字

假设我们有两个名为matches和的数据库teams

orderBy实际上工作正常。console.log(doc.data().date)下面按顺序显示匹配项。

但是在teamARef.get().then(){}块中,它不再起作用了。

早期的比赛往往出现得早,但顺序不好。

也许发生这种情况then()是因为不一定按照与orderBy?

代码


var db = firebase.firestore();
db.collection("matches").orderBy("date").limit(20) 
    .get()
    .then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {

            // **IN ORDER**
            console.log(doc.data().date)

            var teamARef = db.collection("teams").doc(doc.data().teamARef.id)
            var teamBRef = db.collection("teams").doc(doc.data().teamBRef.id)

            teamARef.get().then(function(docA){
                teamBRef.get().then(function(docB){

                    var nameA = docA.data().name
                    var nameB = docB.data().name

                    // **NOT IN ORDER!**
                    console.log(nameA + ', ' + nameB + ' @' + doc.data().date)
                }
            }
        }
    }

例如输出

它按此顺序出现。

2017-01-01
2017-01-02
2017-01-03
2017-01-04
2017-01-05

BAK, BIA @2017-01-01
EWN, ALE @2017-01-03
ENO, VNI @2017-01-02
LNE, LWM @2017-01-05
BIC, AIC @2017-01-04

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


我认为你的意思是改变 teamBRef 但你在这里做了两次 teamARef:

var teamARef = db.collection("teams").doc(doc.data().teamARef.id)
var teamARef = db.collection("teams").doc(doc.data().teamARef.id)

推荐阅读