Quasar Firestore 字段相等查询过滤器不起作用

Quasar Firestore field equality query filter doesn't work

我正在使用 quasar read/write 向 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 控制台中看到重复数据:

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

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

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

这会打印:

Skip existing record: ...

当我将标题更改为 non-existing 时,它会打印:

Add missing todo:

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

如果在此之后您仍然遇到问题,请尝试使用我在此处分享的类似最小设置重现它,以便我们查看。

请记住包含用于过滤器 <object>.<field> 的字段的完整路径。在这种情况下,它是 todo.title。所以,where("todo.title", "==", todo.title) 解决了这个问题。