firestore <查询与orderBy混合查询

时间:2019-04-10 17:22:09

标签: javascript node.js google-cloud-platform google-cloud-firestore

我正在使用firestore查询具有复合查询的文档,我的代码是:

    let query = firestore.collection( 'market' )
    let res = []
    let newChkPt = false

    // states
    query = query.where('deListTime', '==', false)
    query = query.where('tradeTime' , '==', false)
    query = query.where('expirationTime', '>', Date.now())

    // FIFO ordering
    query = query.orderBy('originationTime', 'desc')        
    query = query.limit(3)


    if (chkPt) {

        await query
            .startAfter(chkPt)
            .get()
            .then(snap => {
                snap.forEach(doc => {
                    res.push(doc.data());
                    newChkPt = doc.data()['originationTime']           
                })
            })
            .catch(e => { console.log(e); return false})

    } else {

        await query
            .get()
            .then(snap => {
                snap.forEach(doc => {
                    res.push(doc.data());
                    newChkPt = doc.data()['originationTime']           
                })
            })
            .catch(e => { console.log(e); return false})
    }

在控制台中,我可以在deListTime,tradeTime,expirationTime和originationTime字段之间指定每种组合复合查询索引。但是我指定的这个复合查询拒绝按预期获取数据。如果我将

注释掉
    query = query.orderBy('originationTime', 'desc')       

我得到了数据,如果我将'>'注释掉了,而其他所有内容都没有评论:

    query = query.where('expirationTime', '>', now)

我也获得了所需的数据。是>搞砸了吗?

索引:

enter image description here enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

您要在某处初始化“现在”吗?您是说Date.now()吗?