【发布时间】:2018-05-17 17:37:52
【问题描述】:
用例:查找我参与的对话。
给定一组对话,有没有办法在嵌套对象的属性上使用 where exists 子句?我正在使用一个带有 id 的对象,因为它是关键,希望它是我可以运行 where 查询的东西。我应该把参与者字段放在一个数组中吗?
db.collection('conversations')
.where('participants.${userId}', 'exists', true)
.get()
.then(() => {
// ...
});
示例对话对象
{
id: 'foo'
participants: {
userIdA: {
username: 'bar'
},
userIdB: {
username: 'joe'
}
}
}
【问题讨论】:
-
我记得从第一个值开始的一些事情。所以
.where('participants.${userId}', '>=', ' ')(空格是第一个可打印的 ASCII 字符)。.orderBy('participants.${userId}')也可能有效。 -
所以 orderBy 有效,但 >= '' 无效。 orderBy 技巧让我有点紧张,以防它的行为发生变化。是否在文档中的某个地方设置了 order by 子句中带有 null 的记录不会在集合中返回?或者,有没有办法我应该调整我的数据模式以使这个查询更容易?也许将参与者从嵌套对象中拉出来并使其成为顶级属性..在这种情况下,我会将对话硬编码为必须设置在属性
userA和userB的参与者 -
这个阶段的顺序已经很好地定义了,尽管我很惊讶
>=不起作用。对此感到抱歉。
标签: javascript google-cloud-firestore