Angular Firestore:使用 where 子句的集合查询的正确语法是什么?

2024-02-19

我有查询 Firestore 并返回 Observable 类型的工作代码ImageUploadWId[]。我想退货Promise反而。这是因为

  1. 我的数据不经常变化;
  2. 我正在根据传入的数据执行删除。

SnapshotChanges()返回操作数组。第一个操作包含大小为 1 的不完整数组。最后一个操作包含大小为 4 的数组。最后一个数组是完整的;它拥有所有ImageUploadWIds从一groupId.

我只想要一个数组ImageUploadWIds仅来自指定的 groupId。使用 Promise 给了我ImageUploadWIds从所有的groupIds。我相信 where 子句不起作用。

这是我的工作代码,仅打印imageUploadgroupIds 来自一个 groupId,但返回多个数组。最后一个数组是我唯一需要的。编辑(添加日志语句):

getImageInfosWIds(bathroomGroupId: string): Observable<ImageUploadWId[]> {
  return this.afs.collection(this.bathroomImagesLocation,
    ref => ref.where('groupId', '==', bathroomGroupId)).snapshotChanges()
    .map(actions => {
      return actions.map(a => {
        const data = a.payload.doc.data();
        const id = a.payload.doc.id;
        const imageUpload = new ImageUploadWId();
        imageUpload.set(id, <ImageUpload>data);
        return imageUpload;
      })
    })
}

onDeleteGroup(groupId: string) {
this.bathroomGroupService.getImageInfosWIds(groupId)
  .subscribe((imageUploads) => {
    console.log("imageUploads.length: " + imageUploads.length);
    for (let imageUpload of imageUploads) {
      console.log("(groupId, filename): (" + imageUpload.groupId + ", " + imageUpload.filename + ")");
    }
  })
}

这是我尝试使用 Promise 的代码。这会打印来自我的两个组的 imageUploads,而不是仅打印给定的 BathroomGroupId。

getImageInfosWIds(bathroomGroupId: string): Promise<QuerySnapshot> {
  return this.afs.collection(this.bathroomImagesLocation,
    ref => ref.where("groupId", "==", bathroomGroupId))
    .ref
    .get();
}

onDeleteGroup(groupId: string) {
  this.bathroomGroupService.getImageInfosWIds(groupId)
  .then( (querySnapshot) => {
      querySnapshot.forEach((doc) => {
        console.log("edit-bathrooms: " + doc.data().groupId);
      })
  },
  () => {console.log("Error in edit-bathrooms. promise unfullfilled " +
      "in onDeleteGroup( " + groupId + " )")});
}

编辑:这是最终有效的代码:

  onDeleteGroup(groupId: string) {
    this.bathroomGroupService.getImageInfosWIdsObservable(groupId)
    .pipe(take(1)).subscribe(
    data => {
      console.log(data[0].groupId);
    });
  }

 getImageInfosWIdsObservable(bathroomGroupId: string) {
   return this.afs.collection(this.bathroomImagesLocation,
   ref => ref.where('groupId', '==', bathroomGroupId)).snapshotChanges() //rxjs 5 -> 6  library
   .pipe(
    map(actions => actions.map(a => {
      const data = a.payload.doc.data();
      const documentId = a.payload.doc.id;
      const imageUpload = new ImageUploadWId();
      imageUpload.set(documentId, <ImageUpload>data);
      return imageUpload;
    }))
  );
}

最后一句话。如果您仍然获得额外的数组,则您可能已在代码的另一部分订阅了相同的 Firestore 集合并且未取消订阅。这是我的问题的一部分。


AngularFire2 包装了 Firebase 引用,因此调用.ref.get()创建一个新引用并忽略您提供的查询函数。

幸运的是,RxJS 可以轻松地将 Observable 转换为 Promise。你只需要管道输入first() or take(1)强制 Observable 完成(否则承诺将永远无法解决,因为 Firebase 提供了无尽的实时流)。

 return this.afs.collection(...)
  .valueChanges()
  .pipe(first())
  .toPromise()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular Firestore:使用 where 子句的集合查询的正确语法是什么? 的相关文章

  • 茉莉花单元测试 - 测试对象的未定义属性

    我有以下声明 expect A BAR name toEqual foo 由于我的对象 A 具有顶级属性 BAR 并且 bar 具有值 foo 传递 我想测试我的结构以确认属性 NONEXISTINGPROP 尚未定义 例如 expect
  • 执行页面的 javascript 后保存页面的 html 输出

    我正在尝试抓取一个网站 它首先加载 html js 使用js修改表单输入字段 然后使用POST 如何获得 POSTed 页面的最终 html 输出 我尝试使用 phantomjs 执行此操作 但它似乎只有渲染图像文件的选项 谷歌搜索表明这应
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • NodeJs读取JSON文件

    我正在使用 NodeJs 读取 json 文件 我的代码非常基本 var obj require sample json console log obj 0 Sample json 文件包含这样的字符串化 JSON sample good
  • Disqus 评论数始终为 0 条评论

    我想我已经按照通用代码的说明设置了 Disqus 问题是它总是说某个帖子有 0 条评论 拿这个帖子来说 http tx0rx0 com retropie and the raspberry pi http tx0rx0 com retrop
  • RequireJS 文本插件和变量连接字符串

    我正在使用 RequireJS 文本插件来加载一些 html 模板 当我将字符串文字传递给 require 函数时 它工作正常 var templateHTML require text templates template name ht
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • SVG 中三角形的圆角

    我正在尝试制作一个具有圆角的三角形 三角形将如下所示 左下角是唯一看起来相当容易制作的角 主要是因为这是一个 90 度的 转弯 该转弯是使用QSVG 中的命令具有以下参数 Q x y height x y height RADIUS从我正在
  • JavaScript 原型 - 请澄清

    有人可以帮我理解原型属性吗 我不明白原型属性是函数的属性还是函数内部的属性 假设我们创建以下构造函数 Food 此时 函数 Food 具有 Food prototype 属性 由于 Food 是 Object 的实例 因此这意味着 Obec
  • 如何删除从 javascript var 转义的反斜杠?

    我有这个变量 var x div class Which is div class 但是我需要 div class abcdef 我怎样才能 unes cape 这个变量来删除所有转义字符 您可以通过正则表达式将反斜杠后跟引号替换为仅引号
  • 如何在启用导航栏的情况下打开新的浏览器窗口?

    我有这个JS方法 function OpenLink strDestination var features left 10 top 10 location 0 menubar 0 resizable 0 scrollbars 1 stat
  • 模型不是 AngularJS 中输入的日期对象

    使用 AngularJS 我试图使用输入显示日期type date
  • 添加选项以选择框而不用 Internet Explorer 关闭该框?

    我正在尝试构建一个包含多个下拉选择框的网页 这些下拉选择框在首次打开时异步加载其选项 这在 Firefox 下工作得很好 但在 Internet Explorer 下则不然 下面是我想要实现的目标的一个小例子 基本上 有一个选择框 ID 为
  • 全局未在 ../node_modules/socket.io-parser/is-buffer.js 中定义

    预先感谢您帮助我 我正在尝试在我的一个角度组件中连接套接字 但在浏览器的控制台中它会抛出一个错误 指出 Global 未在 Object node modules socket io parser is buffer js 中定义 这是我的
  • 我可以在不使用 Jquery UI 的情况下获得 Jquery Pulsate Effect 吗?

    我遇到了由于某种原因无法使用 Jquery UI 的情况 我正在尝试在不使用 Jquery UI 的情况下获得 Jquery UI 脉冲效果 与此链接类似 http docs jquery com UI Effects Pulsate ht
  • 清理 html 字符串中的所有脚本

    HTML5 剪贴板很棒 但我正在寻找一种使其安全的方法 用户正在将文本 html 粘贴到我的网页中 这允许他们粘贴图像 表格等 我正在寻找一种方法 在将粘贴的内容添加到页面之前删除所有脚本 我需要删除
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • Google 地图 InfoBubble PixelOffset(从标记上方的默认位置移动)

    我正在尝试实现一个自定义 infoBubble 它的框打开到标记的侧面 而不是顶部的默认位置 事实证明这比预期的要困难 使用普通的infoWindow 您可以使用pixelOffset 请参阅此处文档 https developers go
  • 在 Firefox 中使用 Javascript 检测键盘布局

    有没有办法在 Firefox 中检测客户端的键盘布局 我知道 Chrome 的答案是肯定的 请参阅https developer mozilla org en US docs Web API Navigator keyboard https

随机推荐

  • Angular2 ngFor 跳过第一个索引[重复]

    这个问题在这里已经有答案了 如何跳过数组中的第一个索引 li user name is user age years old li 你可以使用片管 https angular io docs ts latest api common ind
  • 从 TableView 中的可编辑列动态填充 ChoiceBox

    基本上问题标题说明了一切 我有一列字符串 称为type 在表格视图和相应的数字列 称为size 每行代表一个对象CargoItem 它有两个属性type and size 两列都是可编辑的 TableView 与相应的可观察列表相关联Car
  • CFNetwork SSLHandshake 失败 iOS 9

    有使用 iOS 9 beta 1 的人遇到过这个问题吗 我使用标准 NSURLConnection 连接到 Web 服务 一旦调用 Web 服务 我就会收到以下错误 目前该功能适用 于 iOS 8 3 可能的测试版错误吗 任何想法或想法都会
  • 如何在 SonataAdmin 中创建自定义 DataGrid 过滤器

    我有一个带有许多状态代码的实体交易 我希望用户能够在 SonataAdmin 中将这些状态代码视为字符串 用户还应该能够根据这些状态代码进行过滤 Entity Transaction const TRANSACTION STATUS WAI
  • 有什么方法可以在 Phoenix 中定义自定义路线吗?

    假设我想创建一个resources通过添加一些自定义操作 rails 中的类似物是 resources tasks do member do get implement end end 这不仅会返回 7 条标准路线 还会返回 1 条新路线
  • 为什么我的本地通知在 iOS 10 中没有在前台触发?

    我试图理解为什么本地通知没有显示在前台 我相信我添加了所有正确的代码来允许此功能 但当我的应用程序位于前台时没有显示横幅 这是我添加的内容AppDelegate swift import UserNotifications UIApplic
  • 适用于 Android 的类似 iPhone 的导航点

    我必须创建一个像 iPhone 画廊一样带有导航点的图片库 查看屏幕截图 我需要这样一个小部件 看一下白点 Android 中是否有包含导航点的小部件 如果没有 我怎样才能重现这种效果 经过漫长的日子我发现从 Github 源查看寻呼机导航
  • 如何仅使用标准库将 UTC 日期时间转换为本地日期时间?

    我有一条蟒蛇datetime使用创建的实例datetime utcnow 并保存在数据库中 为了显示 我想转换datetime从数据库检索实例到本地datetime使用默认的本地时区 即 就好像datetime是使用创建的datetime
  • 在 SQL Server 数据库中自动添加对象及其关系

    假设我想插入一个新的Experiment在我的 SQL Server 数据库中 使用实体框架 4 0 Experiment有 1 Tasks in it Both Experiment and Task从获得EntityObject 此外
  • Javascript 数据表中的自动换行列数据

    我有一个 JS 数据表 我们在其中输入客户信息 在某些情况下 一些客户参考是这样的 reference text 26reference 5Ftext 3D 2526reference 255Ftext 253Dtest 252520ips
  • AudioKit v4.2 上的 AKRhodesPiano 错误(粉碎)

    我在用着AudioKit 版本 4 2 https github com AudioKit AudioKit releases tag v4 2在我的手机 iPhone X 上安装我的应用程序后 我收到此错误 参见附图 使用 AKRhode
  • 如何获取 SQL 中具有 MAX 和 MIN 值的行的 ID

    我正在努力使我的网站使用的查询更加高效 由于对 SQL 有点模糊 我还没有真正学会如何使用嵌套查询 但我刚刚设法得到了一些非常接近我想要的东西 我销售吉他 我有一个大数据库 其中单独列出了具有不同饰面选项的所有产品 项目在 dB 中具有唯一
  • oracle多用户功能

    如何创建可供不同用户使用的功能 它必须像内置的 oracle 函数一样工作 可以从任何用户调用 我想这可以通过授予一些特权来实现 这应该为特定用户执行此操作 GRANT EXECUTE ON your function TO some us
  • 如何将包含冒号的 GET 请求发送到 ASP.NET MVC2 控制器?

    这工作正常 GET mvc Movies TitleIncludes Lara 20Croft 当我提交包含冒号的请求时 如下所示 GET mvc Movies TitleIncludes Lara 20Croft 20Tomb 它会生成
  • 如何在Android Studio中更改项目名称

    将 eclipse 项目导入 Android Studio 并将其保存在新文件夹中 将包名称和所有内容更改为新名称 但项目名称仍然是旧项目中的名称 如何将指向的名称更改为其他名称 尝试更改此文件的内容 C Path To Project i
  • EnterCriticalSection 死锁

    多线程日志记录应用程序出现死锁情况 小背景 我的主应用程序有 4 6 个线程正在运行 主线程负责监视我正在做的各种事情的运行状况 更新 GUI 等 然后我有一个传输线程和一个接收线程 发送和接收线程与物理硬件通信 我有时需要调试发送和接收线
  • 如何使用向量通过指针引用递归结构

    我有结构 我们称它们为 sn 看起来像 struct sn string name vector
  • 无法确定包装器版本

    我创建了一个反应本机应用程序 只需执行以下操作 react native init app 我已经按照这个教程进行操作 Facebook 入门 我使用 Linux https facebook github io react native
  • 如何使用 SciPy 插值 3D 数据时提高性能

    我有代表大气的 3D 数据 现在我想将此数据插值到一个公共 Z 坐标 我的意思应该从函数的文档中清楚地看出 下面的代码工作正常 但我想知道是否有办法提高性能 def interpLevel grid value data interp li
  • Angular Firestore:使用 where 子句的集合查询的正确语法是什么?

    我有查询 Firestore 并返回 Observable 类型的工作代码ImageUploadWId 我想退货Promise反而 这是因为 我的数据不经常变化 我正在根据传入的数据执行删除 SnapshotChanges 返回操作数组 第