在Vue App上使用FieldValue在Firestore上增加值

时间:2019-11-06 17:38:20

标签: javascript firebase vue.js google-cloud-firestore

我当前正在尝试通过1更新Firestore数据库上文档的值。搜索了一会后,我发现有关FieldValue.increment(1)的信息。我的目标是拥有一个包含2个字段(主持人/侦察兵)的表单,我将在这些字段上输入需要增加其主持人或侦察员值的人员的姓名。这就是我的Vue组件的样子

a := handler.Map{"DoAThing": SessionHandler{s}}

所有内容都会编译,但是每当我尝试在每个输入字段中输入名称时,都会出现错误“ FirebaseError:“ Function Query.where()需要有效的第三个参数,但未定义。”

我不知道为什么会收到此错误或如何解决该错误。谁能指出我正确的方向?

2 个答案:

答案 0 :(得分:2)

目前的代码至少存在两个问题:

  • this.$route.params.host应该是this.host,因为这是Vue绑定主机参数的地方。这是您最初的问题的直接答案。

  • 假定db是从firebase.firestore()创建的,这不是为FieldValue函数引用静态increment的有效方法。您需要以firebase.firestore.FieldValue的形式直接获取。您将需要以某种方式将此符号导入您的代码中,因为目前firebase无法访问,因为它仅存在于firebaseInit模块中。

执行此导入操作的一种方法是将其添加到<script>部分的顶部(另一种答案中记录了另一种方法):

import firebase from "firebase/app";

还要注意,鉴于每个文档的更新速率限制为每秒1次更新,计数器最终可能不会扩展。 firebase文档中有一个solution,用于在您不再使用此解决方案时如何构建分布在多个文档中的计数器。无论如何,这也显示了一般increment的正确使用。

答案 1 :(得分:1)

对于FieldValue.increment(1)问题,您需要将FieldValue文件中的firebaseInit导出,如下所示:

import firebase from "firebase/app"; 
import "firebase/firestore"; 
import firebaseConfig from "./firebaseConfig"; 

const firebaseApp = firebase.initializeApp(firebaseConfig);

const db = firebase.firestore();
const fv = firebase.firestore.FieldValue;

export { db, fv };

然后,在您的组件中执行以下操作:

import {db, fv} from "../data/firebaseInit";

//....
fv.increment(1)

对于第二个问题,您将在vue路由器doc中看到:

  

$ route.params

     

一个对象,其中包含动态分段和星形分段的键/值对。如果没有参数,则该值将为空对象。

由于您没有在URL中传递任何键/值对,因此需要使用另一个Route对象属性,即$route.path

  

$ route.path

     

一个字符串,它等于当前路径的路径,始终解析为绝对路径。例如“ / foo / bar”。

如下:

  db.collection("members")
    .where("name", "==", this.$route.path.substr(1))
    .get()
    ...