是否可以对存储在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 => ...)
希望这对;)有所帮助