首页 > 解决方案 > Quasar Firestore 字段相等查询过滤器不起作用

问题描述

我正在使用 quasar 向 Cloud Firestore 读取/写入唯一数据,但以下代码不起作用。它无法根据title字段检测现有记录。我正在使用 Web 版本 9 语法。

<script>
import seedData from "../../data/todos.json";
import {
  getFirestore,
  collection,
  getDocs,
  addDoc,
  query,
  where,
} from "firebase/firestore";

const db = getFirestore();
seedData.forEach(async (todo) => {
    console.log("Processing ", todo.title, "...");
    const q = query(
        collection(db, "todos"),
        where("title", "==", todo.title)
    );
    const querySnapshot = await getDocs(q);
    if (querySnapshot.empty) {
        console.log("Add missing todo: ", todo.title);
        await addDoc(collection(db, "todos"), { todo });
        this.todos.push(todo);
    } else {
        console.log("Skip existing record: ", querySnapshot.docs[0].data());
    }
});
</script>

样本数据:

[{
    "userId": 1,
    "id": 1,
    "title": "Learn Quasar", 
    "completed": false
 },
 {
    "userId": 1,
    "id": 2,
    "title": "Learn Vue", 
    "completed": false
 },
 {
    "userId": 1,
    "id": 3,
    "title": "Learn Firebase", 
    "completed": false
 }
]

任何建议和见解都值得赞赏。

quasar dev在调试会话 中在浏览器中看到的重复数据:在此处输入图像描述

在 Firestore 控制台上看到的重复数据: Cloud Firestore 控制台

回购:https ://github.com/khteh/quasar

标签: node.jsvue.jsgoogle-cloud-firestorenosqlquasar-framework

解决方案


我无法用这个简化的代码重现问题:

const q = query(
  collection(db, "69534155"),
  where("title", "==", "Learn Quasar")
);
const querySnapshot = await getDocs(q);
if (querySnapshot.empty) {
  console.log("Add missing todo: ", "Learn Quasar");
} else {
  console.log("Skip existing record: ", querySnapshot.docs[0].data());
}

有关完整的工作代码,请参阅:https ://jsbin.com/gekuqec/3/edit?html,console

这打印:

跳过现有记录:...

当我将标题更改为不存在的内容时,它会打印:

添加缺少的待办事项:

我建议在调试器中单步执行代码,并检查todo.title文档中是否确实存在值。

如果在此之后您仍然有问题,请尝试以与我在这里分享的类似的最小设置复制它,以便我们查看。


推荐阅读