如何在需要找到目标文档的地方创建firestore事务

2024-03-25

我正在寻找一种创建 firestore 事务的方法,在该事务中我从查询中找到文档,然后在事务中修改该文档。

类似的东西(kotlin):

firestore.runTransaction { transaction ->

  val snapshot = transaction.get(db.collection("document")
      .whereEqualTo("someField", null)
      .orderBy("creationDate", ASCENDING)
      .limit(1L))

  val myObject = snapshot.toObject(MyObject::class.java)
  myObject.someFiled = "123"
  transaction.set(snapshot.reference, myObject)
}

这里的问题是返回的查询.limit(1)method 不是 DocumentReference,这是事务接受的唯一类型。因此我的问题是,在java/kotlin中如何实现这样的事务?

我见过类似的东西这篇博文 https://medium.com/@feloy/building-a-multi-player-board-game-with-firebase-firestore-functions-part-1-17527c5716c5使用管理 SDK:

  return trs.get(db.collection('rooms')
    .where('full', '==', false)
    .where('size', '==', size)
    .limit(1));

经过调查,您似乎无法在 Kotlin/Java 中执行此操作,它不受支持。您必须创建云函数并执行类似以下操作:

exports.executeTransaction = functions.https.onRequest(async (req, res) => {

    const db = admin.firestore();

    const query = db
        .collection('collection')
        .where('name', '==', 'name')
        .limit(1);

    db.runTransaction(transaction => {
        return transaction
            .get(query)
            .then((querySnapshot) => {
                const gameDocSnapshot = querySnapshot.docs[0];
                const gameData = gameDocSnapshot.data();
                transaction.update(gameDocSnapshot.ref, { name: 'change' });
                return gameData;
            })
    })
        .then((gameData) => {
            res.send(gameData);
            console.log('Transaction successfully committed!', gameData);
        })
        .catch((error) => {
            res.send('Transaction failed:' + error);
            console.log('Transaction failed:', error);
        });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在需要找到目标文档的地方创建firestore事务 的相关文章

随机推荐

  • 如何在此数据上使用 PIVOT:?

    我有一个 SQL Server 表 如下所示 RESOURCE DESCRIPTION VALUE Test A Name Resource A xyz Test A Height 20 Test A Unit ft Test A Loca
  • IntelliJ 15 运行缓慢并占用 1GB 内存

    我刚刚安装了intelliJ IDEA 15但它有点滞后并且使用大量内存 有时 我的 4GB RAM 笔记本电脑上的内存会超过 1GB 以前的版本是intelliJ性能更好 我怎样才能让它更快 我遇到的另一个问题是自动完成和更正 这两个设置
  • RQ - 清空和删除队列

    我在用着RQ http python rq org 我有一个failed排队有数千件物品 还有另一个test我不久前创建的用于测试的队列现在是空的且未使用 我想知道如何删除所有作业failed排队 然后删除test完全排队吗 对于基本问题表
  • 以阻塞程序语言的方式进行异步?

    Sync way 例如 红宝石 con Mysql new localhost rs1 con query select from test01 A rs2 con query select from test02 B rs getResu
  • 适用于 Visual Studio 2013 的 System.Data.SQlite

    System Data SQLite 的当前发行版无法与 Visual Studio 2013 一起使用 除非您部署 VS2012 Update3 发行包 大概 或仅安装 像我一样在测试机器上 完整版本 有谁知道 System Data S
  • jquery如何比较两个日期

    第一个使用 id 的有格式 var checkindate check in text 28 07 2011 然后我使用当前日期 var now new Date 它的格式是 Wed Jul 20 2011 19 09 46 GMT 053
  • 在 MathLink 函数中检查中止?

    我刚刚发现这样的MathLink功能为LinkWrite and LinkRead有类似其内部的东西CheckAbort吸收任何中止 并且不会进一步传播它们 这可以很容易地显示为LinkRead link LinkLaunch First
  • 返回由 n 个随机数组成的整数 ArrayList?

    如何创建 RandomArray 方法并让它接受整数 n 并返回由 0 到 255 之间的 n 个随机数组成的整数 ArrayList 换句话说 让返回的数组的大小为 n 我使用的是Java Eclipse 我已经创建了 RandomArr
  • Awesome WM:标题栏的图标是什么意思?

    谁能告诉我标题栏中的图标是什么意思 火箭 加号 明星 我很好奇 查看图标的文件名 第一个组件描述了含义 https github com awesomeWM awesome tree master themes default titleb
  • 多处理池内进程超时

    当我使用以下代码时 池结果总是返回超时 我在做的事情在逻辑上是否不正确 from multiprocessing import Pool Process cpu count def add num return num 1 def add
  • 使用 Tkinter 显示图像

    我正在开发一个使用 Tkinter 和 ImageTk 显示一系列图像的 python 程序 我无法显示多个图像 下面是一个重现该错误的完整小程序 程序直接递归地搜索当前的 jpg 文件 并在用户按 Enter 时显示它们 import T
  • 退出 iPhone 应用程序的按钮是否违反 Apple 的准则? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 iPhone 应用程序中创建一个按钮来退出该应用程序 使用exit 0 按下时 这会违反苹果的人机界面指南吗 Apple 不鼓
  • 是否可以将小黄瓜步骤写在多行上?

    我是小黄瓜语言的新手 在我看来这似乎是非常基本的问题 但我找不到答案 我知道可以在 Gherkin 中编写多行步骤参数 如下所示 Given a blog post named Random with Markdown body Some
  • 如何在文档数据库(NoSQL)中设计基本模式?

    我有一个问题如何验证文档中的基本 JSON 字段 我的意思是假设一个字段是否需要 我的意思是基本上字段验证 我知道文档数据库是无模式的 NOSQL 但在 Mongodb 中 有一个选项 这就是我问的原因 例如 在 Mongodb 中 我们有
  • 如何在 C++ 中重载一元减运算符? [复制]

    这个问题在这里已经有答案了 我正在实现向量类 我需要得到一些向量的反面 是否可以使用运算符重载来定义此方法 这就是我的意思 Vector2f vector1 vector2 这是我希望该操作员完成的任务 Vector2f oppositeV
  • Mercurial diff 在移动/重命名后不起作用

    将文件移动到另一个目录后 我无法再显示两个修订版之间的差异 例如 hg init touch a hg add a hg ci m Added a echo Bli gt gt a hg ci m Bli echo Bla gt gt a
  • 如何使用 TextMate 将 JAR 文件中的库导入到 Java 程序中

    我需要用 Java 编写一个简单的程序 并且希望像使用 TextMate 在 Python 和 Ruby 中编程一样来完成它 我可以编写并运行一个简单的 Hello World 程序 但找不到加载外部库的方法 我只需要使用工作目录中的所有
  • 将 Unix 纪元时间转换为扩展 ISO8601

    我有 3 个表 我想使用日期来处理 但是其中一个表包含 unix 纪元格式的日期 以下是 3 个字段的示例 Table1 2017 02 01T07 58 40 756031Z Table2 2017 02 07T10 16 46Z Tab
  • Android 8.0 设备的本机崩溃 tgkill

    我遇到了 Android 8 0 设备的本机崩溃 仅崩溃 发生在运行 Android 8 的设备上 我在 Android Vitals ANRs crashes 中发现了很多本机崩溃 我无法重现这些问题 设备 均搭载 Android 8 0
  • 如何在需要找到目标文档的地方创建firestore事务

    我正在寻找一种创建 firestore 事务的方法 在该事务中我从查询中找到文档 然后在事务中修改该文档 类似的东西 kotlin firestore runTransaction transaction gt val snapshot t