首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据深度查询

数据深度查询
EN

Stack Overflow用户
提问于 2017-10-24 18:38:14
回答 1查看 334关注 0票数 1

是否有可能对存储在Baqend中的数据进行“深度查询”?

就像这样:

代码语言:javascript
复制
db.Shifts.find()
   .where({
      "applicants.applicants": { "$in": ["db/User/12"] },
   })

applicants.applicants是对保存在不同数据类中的集合的引用。

如果没有过滤器,数据的形状如下:

代码语言:javascript
复制
Array [
  Object {
    "id": "/db/Shifts/123",
    "applicants": Object {
      "applicants": Array [
        "/db/User/12",
        "/db/User/13",
      ],
  },
  Object {
    "id": "/db/Shifts/456",
    "applicants": Object {
      "applicants": Array [
        "/db/User/12",
        "/db/User/14",
      ],
  },  
  Object {
    "id": "/db/Shifts/789",
    "applicants": Object {
      "applicants": Array [
        "/db/User/13",
        "/db/User/14",
      ],
  },
]

因此,在这种情况下,我尝试做一个只返回shift 123和456的查询,因为它们都有用户12。这是可能的吗?或者在我们将数据返回到客户端之后,我们需要使用Ramda来过滤它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-25 06:21:56

只有当applicants存储在Shifts对象中时,深度查询才有可能。在我们的指南中,这里实际上是这个深层查询的一个例子,我们在这里使用activities.start进行过滤。

您的查询应该如下所示:

代码语言:javascript
复制
db.Shifts.find()
  .in('applicants.applicants', "/db/User/12")
  .resultList()
  .then(shifts => ...)

如果你喜欢的话,你也可以同时搜索多个用户。它的工作原理很简单:

代码语言:javascript
复制
db.Shifts.find()
  .in('applicants.applicants', "/db/User/12", "/db/User/13", "/db/User/14")
  .resultList()
  .then(shifts => ...)

这将返回所有的班次,其中一个用户12,13或14是申请人。

如果应用程序将申请者存储在不同的类(例如Applicant类)中,并且只在Shifts类中引用它们,则需要首先查询申请者对象,如下所示:

代码语言:javascript
复制
db.Applicants.find()
  .in('applicants', "/db/User/12")
  .resultList()
  .then(applicantObjects => ...)

有了这些,您就可以像这样查询Shifts

代码语言:javascript
复制
db.Shifts.find()
  .in('applicants', applicantObjects.map(it => it.id))
  .resultList()
  .then(shifts => ...)

希望这会有所帮助;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46917764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档