代码之家  ›  专栏  ›  技术社区  ›  Swoox

对象上包含的firestore数组

  •  3
  • Swoox  · 技术社区  · 6 年前

    我有以下文件:

    {
        "ID" : "01",
        "Name" : "A1",
        "players" : [ {
            "active" : false,
            "name" : "dissident"
          }, {
            "active" : false,
            "name" : "ink"
          }
        ]
    }
    

    用JSON写下来,这样更容易理解。 现在我想对firestore做的是查询players[*].name。 我看到了使用“array\u contains”的新选项。

    是否可以查询玩家[*].name?

    这就是我所尝试的:

    this.afs.collection('Locations', ref => ref.where('players.name', 'array-contains', _name))
    

    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}) );
    }
    

    但这是取决于积极的价值,这将不适用于每一种情况。

    1 回复  |  直到 6 年前
        1
  •  5
  •   camden_kid    6 年前

    你可以试着对整个对象进行测试。

    this.afs.collection('Locations', ref => ref.where('players', 'array-contains', {active : false, name : _name}))
    
        2
  •  0
  •   Kalani Bright    5 年前

    更好的方法是使用两个数组,其中一个数组只包含id/guid作为字符串,并在其上使用array contains。

    如果仍然需要对象,只需创建/拥有包含对象的第二个数组,并且在向其中添加对象时,可以将字符串添加到另一个数组。