我有以下文件:
{
"ID" : "01",
"Name" : "A1",
"players" : [ {
"active" : false,
"name" : "dissident"
}, {
"active" : false,
"name" : "ink"
}
]
}
将其用JSON写下,以便于理解。 现在,我要使用firestore进行的是对player [*]。name的查询。 我已经看到了使用“ array_contains”的新选项。
但是我已经看到所有示例都使用字符串数组而不是对象数组。 是否可以查询玩家[*]。名称?
这是我尝试过的:
this.afs.collection('Locations', ref => ref.where('players.name', 'array-contains', _name))
基于我建立的@camden_kid反应:
this.locationsCollection = this.afs.collection('Locations', ref => ref.where('players', 'array-contains', {active : false, name : _name}) );
if(this.locationsCollection === undefined){
this.locationsCollection = this.afs.collection('Locations', ref => ref.where('players', 'array-contains', {active : true, name : _name}) );
}
但这取决于有效值,这不适用于每种情况。
答案 0 :(得分:3)
您可以尝试针对整个对象进行测试,例如
this.afs.collection('Locations', ref => ref.where('players', 'array-contains', {active : false, name : _name}))
答案 1 :(得分:0)
您不能以寻找一个参数的方式在对象上使用它。 Firestore不支持这一点(讨厌)。我研究了几种方法。 John Delaney的Firestore Modeling课程旨在解决这些问题以及更多问题。
更好的方法是有两个数组,每个数组仅包含id / guid作为字符串,并在其上使用array-contains。
如果仍然需要对象,则只需创建/拥有带有对象的第二个数组,然后将对象添加到其中一个,即可将字符串添加到另一个对象中。