【发布时间】:2018-12-04 15:15:23
【问题描述】:
编辑 因此,在与 firebase 开发人员审查了这个问题之后,这是按设计工作的,没有实际的方法可以实现这一点。 Firestore 开发人员的官方回应:
诚然,某些类型的查询很困难,如果不可行的话, 使用 Firestore 的 NoSQL 设计时。如果缺乏这样的 能力被认为是您的用例的交易破坏者,那么它是 Firestore 可能不是适合您的数据库解决方案。
如果您渴望实现类似的目标,那么此解决方案可能对您有用:https://firebase.google.com/docs/firestore/solutions/arrays#solution_a_map_of_values。
如果没有,总是有 AWS
================================================ ==============================
我注意到第二个orderBy 查询选项对返回的数据没有任何作用。
考虑以下查询:
firebase.firestore()
.collection('posts')
.orderBy('date', 'desc')
.where('date', '>', new Date(1529802276644))
.orderBy('rating', 'desc')
.limit(size)
此查询打算按date 字段排序posts,然后过滤最后两天,然后按rating 排序。
此查询目前在两天内返回 3 个帖子,但未按评级排序。我收到的结果是:
[
{date: 3 hours ago, rating: 1},
{date: 5 hours ago, rating: -1},
{date: 9 hours ago, rating: 0},
]
如果我在删除最后一个 orderBy 的情况下执行相同的查询,我实际上会得到完全相同的结果:
firebase.firestore()
.collection('posts')
.orderBy('date', 'desc')
.where('date', '>', new Date(1529802276644))
.limit(size)
产生:
[
{date: 3 hours ago, rating: 1},
{date: 5 hours ago, rating: -1},
{date: 9 hours ago, rating: 0},
]
我目前对帖子启用了索引。我相当确定该索引是正确的,因为在此之前我收到一个关于缺少索引的错误,然后用这个索引修复它:
posts | date DESC rating DESC | enabled
我很确定问题出在 firebase 而不是我正在使用 react-native-firebase 的库。我使用的 firebase firestore SDK 在 5.0.4 我相信
编辑 以下是我在 react-native 项目中实际使用代码的方式:
const episodeRef = firebase.firestore().collection('posts');
const baseRequest = episodeRef.orderBy('date', 'desc').where('date', '>', new Date(1529802276644)).orderBy('rating', 'desc').limit(25)
const documentSnapshots = await baseRequest.get()
console.log('documentSnapshots', documentSnapshots);
console.log 打印出有效的查询快照,_query 字段大致如下:
_fieldFilters:{
fieldPath:{
string:"date",
type:"string"
},
operator:"GREATER_THAN",
value:{
type:"date",
value:1529802276644
},
}
_fieldOrders:{
0:{
direction:"DESCENDING",
fieldPath: {
string:"date",
type:"string"
},
}
1:{
direction:"DESCENDING"
fieldPath:{
string:"rating",
type:"string"
}
}
}
(由于复印导致打印不良)
【问题讨论】:
-
如果您确定存在错误,请提交错误报告:firebase.google.com/support/contact/bugs-features
-
@DougStevenson,我不确定这是一个错误,只是在寻找关于我可能做错什么的建议。不过感谢您的链接,一旦确定,我会发送报告!
-
好的,你说“很确定问题出在 Firebase 上”。如果你有复现步骤,提交错误报告并没有错。
-
请编辑您的问题以包括您实际观察/处理数据的方式。简单的
console.log()很好,但没有它我们无法知道问题是否源于此类代码。 -
虽然 Frank van Puffelen 和 Doug Stevenson 试图帮助您,但我不适合说些什么,但您是否尝试过任何其他组合来更好地理解问题?就像删除 where 子句或更改操作顺序(如
orderby -> orderby -> where或where -> orderby -> orderby或只进行评级顺序)
标签: javascript firebase react-native google-cloud-firestore react-native-firebase