首页 > 解决方案 > 我无法写入 Firestore 数据库

问题描述

我正在尝试将名称和价格值添加到列表中,但使用此功能:

Write_date () {
  alert ("write date");
   this.products.id = this.randomId();
db.collection("products").add(this.products)

.then(function(docRef) {

    console.log("Document written with ID: ", docRef.id);
    this.products.name ="";
    this.products.price ="";

})
.catch(function(error) {
    console.error("Error adding document: ", error);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

[Vue 警告]:v-on 处理程序中的错误:“FirebaseError:[code=invalid-argument]:函数 CollectionReference.add() 要求其第一个参数是对象类型,但它是:一个数组”

vue js网站上使用的包有:

"bootstrap": "^4.4.1",
"bootstrap-vue": "^2.13.0",
"core-js": "^3.6.4",
"firebase": "^7.14.2",
"jquery": "^3.4.1",
"materialize-css": "^1.0.0-rc.2",
"node-ipc": "^9.1.1",
"popper.js": "^1.16.1",
"run": "^1.4.0",
"serve": "^11.3.0",
"vue": "^2.6.11",
"vue-fire": "^0.1.0",
"vue-router": "^3.1.6",
"vue-simple-alert": "^1.1.1"
products: [],


   product: {
       name: null,
       price: null
    },

   fields: ['name', 'price'],

支撑结构如下:

标签: javascriptgoogle-cloud-firestore

解决方案


Firestore 文档由命名字段组成,每个字段都有一个值。该值可以是一个数组,但它必须始终存储在一个命名字段中。由于您传递的是一个没有名称的数组,因此 SDK 会拒绝该操作。


如果您尝试将每个产品作为单独的文档添加到数据库中,那就是:

this.products.forEach((product) {
  db.collection("products").add(product);
});

如果您尝试将所有产品添加到单个文档中,则必须指定将产品放入的字段名称:

db.collection("products").add({ products: this.products });

推荐阅读