深度查询数据



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

像这样:

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

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

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

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 对其进行过滤?

applicants存储在Shifts对象中时,才能进行深度查询。这实际上是我们指南中这种深度查询的示例,我们按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类中引用它们,则需要首先查询 Ants 对象,如下所示:

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 => ...)

希望这对;)有所帮助

最新更新