1

是否可以对存储在 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 对其进行过滤?

4

1 回答 1

1

只有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,您需要首先查询申请人对象,如下所示:

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

希望这可以帮助 ;)

于 2017-10-25T06:21:56.850 回答