Reactjs 更新firestore中数组字段内的对象

Reactjs 更新firestore中数组字段内的对象,reactjs,google-cloud-firestore,Reactjs,Google Cloud Firestore,我试图更新数组中的一个对象,该数组是firestore文档中的一个字段。因此,我过滤该数组中的对象,以获得我正在寻找的对象。但问题是我如何更新它?我尝试过这样做,但我得到一个错误,说…更新不是一个函数 db.collection('conversations').doc(convoid).onSnapshot(snap=>{ snap.data().messages.filter(msg=>msg.msgid==msgid).update({ messages:

我试图更新数组中的一个对象,该数组是firestore文档中的一个字段。因此,我过滤该数组中的对象,以获得我正在寻找的对象。但问题是我如何更新它?我尝试过这样做,但我得到一个错误,说…更新不是一个函数

 db.collection('conversations').doc(convoid).onSnapshot(snap=>{
    snap.data().messages.filter(msg=>msg.msgid==msgid).update({
      messages: firebase.firestore.FieldValue.arrayUnion(messages)
    })
  })
有什么建议吗?
更新:更详细地说,有一个firestore文档包含一个消息数组,每条消息都有自己的msgid。因此,当我在我的应用程序中单击消息时,我可以访问msgid,现在我想使用此msgid来过滤消息数组中的MSG,并更新特定消息。

snap.data()
本身不是“文档”;它是一个包含文档字段的对象。它不包含DocumentReference,也没有
.update()
方法

snap
也没有
.update()
方法,但它有一个
ref
属性,您可以将其用作
db.doc(snap.ref).update(…

另外,
.filter()
返回/创建一个数组,该数组没有任何形式的
.update()

我觉得你想做的是:


显然,您所做的不止这些,但请注意,
.arrayUnion()
将向数组中添加值,并且可能不会替换值.

执行此操作时,我收到一个错误“u.indexOf”不是一个用于详细说明的函数,有一个firestore文档包含消息数组,每条消息都有自己的msgid。因此,当我在应用程序中单击消息时,我可以访问msgid,现在我想使用此msgid来过滤消息数组中的MSG并更新在特定消息中
db.collection('conversations').doc(convoid).onSnapshot(snap=>{
    db.doc(snap.ref).update({
      messages: firebase.firestore.FieldValue.arrayUnion(
          snap.data().messages.filter(msg=>msg.msgid==msgid))
    })
  })