深入查询数据

时间:2017-10-24 18:38:14

标签: baqend

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

这样的事情:

db.Shifts.find()
   .where({
      "applicants.applicants": { "$in": ["db/User/12"] },
   })

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

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

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",
      ],
  },
]

所以在这种情况下,我正在尝试进行只返回123和456的查询,因为它们都有用户12.这是可能还是我们需要使用Ramda在我们获取数据后过滤它客户方?

1 个答案:

答案 0 :(得分:1)

只有applicants存储在Shifts对象中时,才能进行深度查询。 Here实际上是我们指南中深度查询的一个示例,我们按activities.start进行过滤。

您的查询应如下所示:

db.Shifts.find()
  .in('applicants.applicants', "/db/User/12")
  .resultList()
  .then(shifts => ...)

如果您喜欢,也可以一次搜索多个用户。像这样工作:

db.Shifts.find()
  .in('applicants.applicants', "/db/User/12", "/db/User/13", "/db/User/14")
  .resultList()
  .then(shifts => ...)

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

如果您的应用程序将申请人存储在其他类(比如Applicant类)并且仅在Shifts类中引用它们,则需要首先查询申请人像这样的对象:

db.Applicants.find()
  .in('applicants', "/db/User/12")
  .resultList()
  .then(applicantObjects => ...)

通过这些,您可以像这样查询Shifts

db.Shifts.find()
  .in('applicants', applicantObjects.map(it => it.id))
  .resultList()
  .then(shifts => ...)

希望这会有所帮助;)