【问题标题】:Firestore - Query, then updateFirestore - 查询,然后更新
【发布时间】:2019-09-06 22:12:45
【问题描述】:

我想返回一个具有特定 ID 的项目并对其执行更新操作。我的查询得到了正确的结果,但它不允许我更新它。

我尝试按照本教程进行操作:https://www.youtube.com/watch?v=mYyPbfpoZeM 并阅读文档。两者都没有帮助。同一主题的其他主题是不同的。

我有一个对象数据库,该数据库具有以整数形式存储的唯一 ID。 我有一个 HTML 表单来获取 ID 作为用户输入,下面的查询来检索相应的对象。

我试过这个。查询有效,更新无效。

db.collection('objects').where('ID','==', ID ).get().then((snapshot) => {
        snapshot.docs.forEach( doc => {
            console.log('debug');
            console.log(doc.data().ID);
        })
    });

我还是 firebase 和 js 的新手,所以如果我的代码完全错误,请原谅我。 我目前对此感到困惑:

db.collection('objects').where('ID','==', ID ).get().then((doc) => {
    console.table(doc);
});

这仍然不起作用。

对于第二个 sn-p,我目前得到一张难以辨认的桌子,在其中我无法真正找到我正在寻找的对象。

如何更新单个文档中的单个值?

编辑:我忘记了更新功能的实现尝试。 我在 sn-p 的 for 循环中尝试了doc.update({value:0}),得到了doc.update is not a function。 doc.data().update(...) 也是如此。

在第二个 sn-p 中,我主要尝试查看返回的内容并运行上述 uodate 函数的变体。没有成功。

【问题讨论】:

  • 你的更新代码在哪里?
  • @NadhirFalta 已编辑,感谢您指出我错过了我的主要观点
  • 你在使用 AngularFirestore AngularFirestore 吗?除了更新值之外,您是否知道在该循环中执行任何操作?
  • AngularFirebase,我不知道。我不知道这意味着什么。我是否知道在循环内做任何事情?我不想在循环中做任何其他事情。目前仅用于调试的控制台日志记录。
  • 我可以看看你的构造函数吗?

标签: javascript firebase google-cloud-firestore


【解决方案1】:

我通过研究 firestore 文档中更详细地介绍了实际功能的部分,设法让它工作。不知何故,我很难找到这个。

db.collection("users").where("name", "==", somename).limit(1).get().then(query => {
                console.log(query);
                const thing = query.docs[0];
                console.log(thing.data());
                let tmp = thing.data();
                tmp.current_game_play = tmp.current_game_play + 1;
                console.log(tmp);
                thing.ref.update(tmp);
            });

所以我使用where 获取一个Query 对象,使用get 获取then 承诺解析中的一个querySnapshot,使用docs[0] 检索第一个(也是唯一一个)documentSnapshot,最后使用ref 到获得一个参考,使整个事情在以后更新。

【讨论】:

【解决方案2】:

试试这个:

var objectRef= db.collection("objects").doc(ID);

objectRef.update({
    value: 0
}).then(function() {
    console.log("Document successfully updated!");
}).catch(function(error) {
    // The document probably doesn't exist.
    console.error("Error updating document: ", error);
});

【讨论】:

  • 要么我做 const ID = parseInt(userInput); 并得到 argument must be of type string but is int 要么我不做 parseInt 并且它不返回任何对象
  • 另外,我需要基于旧值的新value,我该怎么做?我可以简单地说.update({value: value-othervalue})吗?
  • @Harri 认为问题出在您的用户输入上,您对用户有什么期望?以及您的 firestoreI Id 是什么样的?
  • 用户输入最初是一个字符串。我可以轻松地将其转换为 int。在 Firestore ID 中是整数。或者,是否有一种简单的方法来检索 firestore 生成的 ID?
猜你喜欢
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2015-09-02
相关资源
最近更新 更多