Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 复合查询甚至不能使用索引_Javascript_React Native_Google Cloud Firestore - Fatal编程技术网

Javascript 复合查询甚至不能使用索引

Javascript 复合查询甚至不能使用索引,javascript,react-native,google-cloud-firestore,Javascript,React Native,Google Cloud Firestore,我正在尝试查询包含两个字段的集合。一个用于>=,另一个用于orderBy 我已使用这两个字段创建了一个复合索引,但出现以下错误: Exception 'Invalid query. You have a where filter with an inequality (lessThan, lessThanOrEqual, greaterThan, or greaterThanOrEqual) on field 'expiresAt' and so you must also use 'expir

我正在尝试查询包含两个字段的集合。一个用于>=,另一个用于orderBy

我已使用这两个字段创建了一个复合索引,但出现以下错误:

Exception 'Invalid query. You have a where filter with an inequality (lessThan, lessThanOrEqual, greaterThan, or greaterThanOrEqual) on field 'expiresAt' and so you must also use 'expiresAt' as your first queryOrderedBy field, but your first queryOrderedBy is currently on field 'sharedAt' instead.' was thrown while invoking collectionGet on target RNFirebaseFirestore with params (
    "[DEFAULT]",
    "users/je601IzZ33VZGYg7iNeTEfOgsis1/canvas",
        (
                {
            fieldPath =             {
                string = expiresAt;
                type = string;
            };
            operator = "GREATER_THAN_OR_EQUAL";
            value =             {
                type = number;
                value = 1563621170;
            };
        }
    ),
        (
                {
            direction = DESCENDING;
            fieldPath =             {
                string = sharedAt;
                type = string;
            };
        }
    ),
        {
    },
    "<null>",
    198,
    199
)

所以,它告诉我我需要把expiresAt作为第一个订购人。因此:

firestore().collection(`users/[id]/canvas`)
      .where('expiresAt', '>=', Math.floor(Date.now() / 1000))
      .orderBy('expiresAt', 'desc')
      .orderBy('sharedAt', 'desc')
当我这样做时,我会得到一个错误,即系统没有处于执行查询的正确状态

我尝试了不同的组合来让它工作

某些信息:ExpireSet是集合中的项目不再对用户可见的时间。SharedAt是项目首次添加到用户列表的时间

编辑:模式很简单。用户有一个子集合“canvas”,其中包含项目,此处只涉及时间戳字段:

title: String,
description: String,
sharedAt: Number,
expiresAt: Number

向我们显示您的数据库架构。应出现第一个错误(关于更改第一个orderBy)。第二个错误(未处于正确状态)不正确。您可以添加完整的错误文本吗?另外,您能否确认索引已完全构建(通过查看Firebase控制台中的索引)?@MichaelLehenbauer我可以确认索引是使用sharedAt和expiresAt创建的。其余的错误是堆栈跟踪。。。所以这里没有太多用处。有了准确的错误文本,我可以更容易地查找错误并找出可能的原因。AFAIK“系统未处于执行查询的正确状态”不是Firestore发出的错误。请向我们显示您的数据库架构。第一个错误(关于更改第一个orderBy)是预期的。第二个错误(未处于正确状态)不正确。您可以添加完整的错误文本吗?另外,您能否确认索引已完全构建(通过查看Firebase控制台中的索引)?@MichaelLehenbauer我可以确认索引是使用sharedAt和expiresAt创建的。其余的错误是堆栈跟踪。。。所以这里没有太多用处。有了准确的错误文本,我可以更容易地查找错误并找出可能的原因。AFAIK“系统未处于执行查询的正确状态”不是Firestore发出的错误。
title: String,
description: String,
sharedAt: Number,
expiresAt: Number