我有一个文档“user”,其中有一个名为“photos”的密钥。这是一个保存的字符串数组,即“照片”文档的ID。
我想通过此“照片”字段查询“用户”:我希望在“照片”属性中拥有此ID的所有用户。
这可以通过firestore吗?
答案 0 :(得分:32)
不幸的是,虽然它已经在我们的路线图上了。
与此同时,您需要使用地图,而不是:
listitem
现在,您可以通过photos: {
id1: true
id2: true
}
过滤来查找id1的所有用户。
详细了解如何在Firebase documentation中查询此类集。
答案 1 :(得分:27)
Added 'array-contains' query operator for use with .where() to find documents where an array field contains a specific element.
https://firebase.google.com/support/release-notes/js 5.3.0
Update: also available in @google-cloud/firestore
: https://github.com/googleapis/nodejs-firestore/releases/tag/v0.16.0
Update 2 https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html
Update 3 now available in Admin Node.js SDK v6.0.0 https://github.com/firebase/firebase-admin-node/releases
答案 2 :(得分:4)
以下是对答案的一些扩展,因为有些人似乎对必须为每个键创建索引感到困惑,Firestore已经为简单查询索引了数据,因此您可以执行简单的查询,如
"series": [
{
"name": "Market Value",
"data": [
{
"name": "Market Value",
"y": 216264
}
]
},
{
"name": "Benchmark Market Value",
"data": [
{
"name": "Market Value",
"y": 216264
}
]
},
{
"name": "Notional Market Value",
"data": [
{
"name": "Notional Market Value",
"y": 216655
}
]
}
]
但除非您为这些参数索引数据,否则无法进行复合查询。因此,您需要索引才能执行以下操作:
documentReference.where('param','==','value').onSnapshot(...)
因此,只要您需要身份证的照片,就可以将其保存为
documentReference.where('param','==','value').where(..otherparams...).onSnapshot(...)
你可以简单地查询在他们的photoField中拥有(例如)fieldID1的用户,而无需在下面形成任何索引和类似查询。
usersCollection : (a collection)
uidA: (a document)
photoField: (a field value that is a map or object)
fieldID1 : true (a property of the photoField)
fieldID2 : true (a property of the photoField)
etc ...
答案 3 :(得分:1)
截至2019年11月,Firestore现在已添加``中''查询。 根据{{3}}:
使用in查询,您可以在特定字段中查询多个值 (最多10个)在单个查询中。您可以通过传递包含以下内容的列表来执行此操作 您要搜索的所有值,Cloud Firestore将匹配 字段等于这些值之一的任何文档。