我在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
答案 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: ....
....
}