【发布时间】:2021-09-09 08:00:30
【问题描述】:
我正在从 firebase 获取数据并且该部分工作正常,但是当我提出两个不同的查询时,它会显示以下错误并要求我在 firestore 中创建索引,但索引已经存在。如果我尝试只使用一个查询来获取数据,那么它工作正常,无论是哪个查询,它都会相应地显示结果。我想同时检查两个查询,然后显示结果。
错误:-
W/Firestore(30122): (23.0.0) [Firestore]: Listen for Query(target=Query(users where isOnline == # com.google.firestore.v1.Value@8bb4a
W/Firestore(30122): boolean_value: true
W/Firestore(30122): integer_value: 0 and age >= # com.google.firestore.v1.Value@90282
W/Firestore(30122): integer_value: 0
W/Firestore(30122): string_value: "18" and age <= # com.google.firestore.v1.Value@91a86
W/Firestore(30122): integer_value: 0
W/Firestore(30122): string_value: "50" order by age, __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/practiceflutter-692db/firestore/indexes?create_composite=ClNwcm9qZWN0cy9wcmFjdGljZWZsdXR0ZXItNjkyZGIvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL3VzZXJzL2luZGV4ZXMvXxABGgwKCGlzT25saW5lEAEaBwoDYWdlEAEaDAoIX19uYW1lX18QAQ, cause=null}
E/flutter (30122): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: [cloud_firestore/failed-precondition] The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/practiceflutter-692db/firestore/indexes?create_composite=ClNwcm9qZWN0cy9wcmFjdGljZWZsdXR0ZXItNjkyZGIvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL3VzZXJzL2luZGV4ZXMvXxABGgwKCGlzT25saW5lEAEaBwoDYWdlEAEaDAoIX19uYW1lX18QAQ
E/flutter (30122): #0 MethodChannelQuery.get (package:cloud_firestore_platform_interface/src/method_channel/method_channel_query.dart:108:7)
E/flutter (30122): <asynchronous suspension>
E/flutter (30122): #1 Query.get (package:cloud_firestore/src/query.dart:177:9)
E/flutter (30122): <asynchronous suspension>
E/flutter (30122):
如果我删除 .where('isOnline',isEqualTo: true) 那么它工作正常或只检查 .where('isOnline',isEqualTo: true) 然后它也相应地显示结果。我希望它检查两者然后继续。我正在尝试的查询是:-
query() {
if (currentUser.showGender == 'everyone') {
return _reference.where('isOnline',isEqualTo: true)
.where('age',
isGreaterThanOrEqualTo: currentUser.ageRange['min'],
)
.where('age',
isLessThanOrEqualTo:currentUser.ageRange['max'])
.orderBy('age', descending: false).limit(docLimit);
} else {
return _reference.where('isOnline',isEqualTo: true)
.where('editInfo.userGender', isEqualTo: currentUser.showGender)
.where('age',
isGreaterThanOrEqualTo:currentUser.ageRange['min'],
)
.where('age',
isLessThanOrEqualTo: currentUser.ageRange['max'])
.orderBy('age', descending: false).limit(docLimit);
}
}
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore