使用Angular将ID与Cloud firestore中的数组进行比较

时间:2018-04-25 10:20:49

标签: javascript angular firebase google-cloud-firestore

我在firebase中的聊天有问题,我试图找到我的用户聊天,为此,我想运行一个查询,在数组中找到这些id calles Conversadores 在我的文档中,我的文档名为 mensajes

Mensajes (collection) >> document >> conversadores (array of strings) 

有可能这样做吗?我没有想法,

@Injectable()
 export class ChatProvider {
 private itemDoc: AngularFirestoreCollection<Mensajes>;
 item: Observable<Mensajes[]>;

      constructor(private afs: AngularFirestore, private _lp: LoginProvider) {
           this.itemDoc = afs.collection('mensajes', ref =>
           ref.where('conversadores', '==', _lp.userId) //userId is a string (ex.'ford0013')
           .orderBy('fechaCreacion', 'desc'));

           this.item = this.itemDoc.valueChanges();
  }
 }

这是我的数据库结构的图片 https://i.imgur.com/se8oX9I.png

Thxks

1 个答案:

答案 0 :(得分:0)

看看Sam Stern的答案:

How to query documents which contains a sent parameter in Firestore?

他解释说“将数据存储为布尔地图更好”。因此,您应该将文档中的字段构造为:

{
  conversadores:
    {ford0013: true, 
     ford0014: true
    },
  fechaCreation: ....
  ....
}

和查询类似

db.collection("mensajes").where("conversadores.ford0013", "==", true).get()

现在,如果您想要通过fechaCreation订购,这将无效,请参阅文档:https://firebase.google.com/docs/firestore/solutions/arrays

文档提到了“对多个字段进行查询”的方法,这种方法会产生如下结构,但我认为这不适用于您希望在where之后使用orderBy的情况。

{
  conversadores:
    {ford0013: 1502144665, 
     ford0014: 1502144665
    },
  fechaCreation: ....
  ....
}