下面是测试数据库的模式:
我想写一个查询,它可以获取所有文档,其中联系人在任何数组索引中的id=1。我已经检查了firestore的array_contains操作符,但问题是我的数组有map,然后有字段id。谢谢
array_contains
nr7wwzry1#
目前无法建立在数组中查找对象字段的查询。在数组中只能找到数组元素的全部内容,而不能找到元素的一部分。对于NoSQL类型的数据库,通常的做法是以适合查询的方式组织数据。因此,在您的情况下,您必须组织数据,以便查找数组项包含特定字符串的文档。因此,您可以创建另一个数组,其中只包含您要查询的字符串。您必须确保这些数组是最新的。你也可以重新考虑数组的使用。数组对于位置数据是很好的,但是除非这些联系人需要以特定的顺序存储,否则你可能希望存储一个对象,其键是id,其字段数据也包含id和name。
uxhixvfz2#
正如Doug所说,您无法查询它,但是,如果您可以将数据结构化为类似this的内容1.将数据存储为Map1.使用id作为键,使用name作为值1.现在,您可以编写一个查询来获取联系人具有id=1的所有文档
id
name
id=1
db.collection("test").where("contacts.1", ">=", "").get()
jmp7cifd3#
其中一个方法是像@Doug说的那样,将需要查询的数据添加到数组中,并使其保持最新。
另一个解决方案是将联系人作为文档的子集合,然后您可以查询联系人并获取其父集合。
final Query contacts = db.collectionGroup("contacts").whereEqualTo("id", 1); for (DocumentSnapshot document : querySnapshot.get().getDocuments()) { System.out.println(document.getId()); System.out.println(document.getString("parent_id")); }
如果您不想将父项添加为另一个字段,您可以从父项引用中获取它,检查此答案https://stackoverflow.com/a/56223319/1278463
snapshot.getRef().getParent().getParent().collection("people")
https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query
gudnpqoy4#
如果您有一个Map或对象数组,并希望获取包含此特定Map/对象的文档,如下所示?array_of_maps.png您可以使用
queryForCategory(categName: string, categAlias: string): Observable[] { firestore.collection('<Collection name>', ref => ref.where('categories', "array-contains", { "alias": categAlias, "title": categName }
4条答案
按热度按时间nr7wwzry1#
目前无法建立在数组中查找对象字段的查询。在数组中只能找到数组元素的全部内容,而不能找到元素的一部分。
对于NoSQL类型的数据库,通常的做法是以适合查询的方式组织数据。因此,在您的情况下,您必须组织数据,以便查找数组项包含特定字符串的文档。因此,您可以创建另一个数组,其中只包含您要查询的字符串。您必须确保这些数组是最新的。
你也可以重新考虑数组的使用。数组对于位置数据是很好的,但是除非这些联系人需要以特定的顺序存储,否则你可能希望存储一个对象,其键是id,其字段数据也包含id和name。
uxhixvfz2#
正如Doug所说,您无法查询它,但是,如果您可以将数据结构化为类似this的内容
1.将数据存储为Map
1.使用
id
作为键,使用name
作为值1.现在,您可以编写一个查询来获取联系人具有
id=1
的所有文档jmp7cifd3#
其中一个方法是像@Doug说的那样,将需要查询的数据添加到数组中,并使其保持最新。
另一个解决方案是将联系人作为文档的子集合,然后您可以查询联系人并获取其父集合。
如果您不想将父项添加为另一个字段,您可以从父项引用中获取它,检查此答案https://stackoverflow.com/a/56223319/1278463
https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query
gudnpqoy4#
如果您有一个Map或对象数组,并希望获取包含此特定Map/对象的文档,如下所示?array_of_maps.png
您可以使用