Javascript Angular Firestore-搜索和更新单个文档

Javascript Angular Firestore-搜索和更新单个文档,javascript,google-cloud-firestore,angularfire2,Javascript,Google Cloud Firestore,Angularfire2,我对网络(以及一切异步)都是新手。我正在尝试在Angular+Firebase应用程序中完成两个步骤: 查询Firestore集合以查找与筛选器匹配的文档的ID(名称=='theName') 然后使用该ID更新文档 我来自嵌入式世界,在那里我可以做类似的事情(应用程序的上下文-我试图跟踪战斗机器人比赛的结果) //用结果更新获胜机器人的文档 //找到我们正在寻找的机器人的ID(例如winningRobotName=“Some Name”) this.firestore.collection('r

我对网络(以及一切异步)都是新手。我正在尝试在Angular+Firebase应用程序中完成两个步骤:

  • 查询Firestore集合以查找与筛选器匹配的文档的ID(名称=='theName')
  • 然后使用该ID更新文档
  • 我来自嵌入式世界,在那里我可以做类似的事情(应用程序的上下文-我试图跟踪战斗机器人比赛的结果)

    //用结果更新获胜机器人的文档
    //找到我们正在寻找的机器人的ID(例如winningRobotName=“Some Name”)
    this.firestore.collection('robots',ref=>ref.where('name','==',winningRobotName)).snapshotChanges()
    .订阅(数据=>{
    this.bots=data.map(e=>{
    返回{
    id:e.payload.doc.id,
    名称:e.payload.doc.data()['name'],
    //其他领域
    }作为机器人;
    })
    });
    
    让robot=this.bots[0] 我认为AngularFire在这方面对您没有帮助,而是直接在常规JavaScript SDK上执行此操作:

    ref.where('name', '==', winningRobotName))
       .get()
       .then((snapshots) => {
         snapshots.forEach((doc) => 
           doc.ref.update({
             id: doc.id,
             name: doc.data().name
           })
       })
    })
    

    我不太清楚
    name:doc.data().name
    应该做什么(因为这是一个身份操作,提供与输入相同的结果),但为了防止这件事影响到您,我尝试了这个方法。

    我用代码尝试了这个方法:
    this.firestore.collection('robots',ref=>ref.where('name','==','fight.winner')。获取().then(…
    但是获取错误
    属性'then'在类型'Observable'上不存在。
    您仍然在那里使用AngularFire,而我的答案显示了如何直接在JavaScript SDK上执行此操作。删除
    this.firestore.collection('robots',ref=>
    位,因为它不需要,并且在这里没有帮助。
    ref.where('name', '==', winningRobotName))
       .get()
       .then((snapshots) => {
         snapshots.forEach((doc) => 
           doc.ref.update({
             id: doc.id,
             name: doc.data().name
           })
       })
    })