使用游标时重新定义连接投影
Redefine join projections on the fly when using cursors
是否可以编辑使用 find
光标时加载连接片段的哪些字段?例如,使用 apostrophe-samples
项目,我通过添加以下投影编辑了产品部分加入专家:
...
{
name: '_specialists',
type: 'joinByArray',
withType: 'specialist',
label: 'Specialists',
help: 'The right people to ask about this product.',
filters: {
projection: {
title: 1
}
}
}
...
在其他地方,我正在使用 find
来获取一些产品,但在这种情况下,我确实需要来自相关专家的更多数据。有没有办法告诉 Apostrophe "hey, this time also get me THESE fields from the join" 而不是使原始投影更加宽松或分两步进行(首先查询产品的专家 ID,然后查询所有专家)?
例如,我试过这个:
self.modulesReady = function() {
var req = self.apos.tasks.getAnonReq();
self.apos.docs.getManager('product').find(req, {}, {title:1, specialistsIds:1, _specialists: {slug: 1}}).toArray(function(err, pieces) {
// do something
})
},
但它仍然只是 returns 原始连接投影中定义的专家头衔。
目前无法以优雅的方式实现。为连接配置的过滤器在为获取连接的查询调用 toArray 之前调用,这意味着目前没有机会覆盖它们。查看joinDriver
方法的实现:
您当然可以在查询后重新获取连接的文档,但这不是一个很好的解决方案。
允许这样做的实现将涉及升级 withJoins
选项,该选项可用于通过传递连接名称数组来覆盖执行哪些连接,以还支持在该数组中包含对象.这些对象可以具有连接名称(或连接点路径)和游标过滤器的覆盖。然后必须在不引入 bc 中断的情况下将其传播到 joinDriver
,这是可能的,因为所涉及的方法确实采用 options
参数。
是否可以编辑使用 find
光标时加载连接片段的哪些字段?例如,使用 apostrophe-samples
项目,我通过添加以下投影编辑了产品部分加入专家:
...
{
name: '_specialists',
type: 'joinByArray',
withType: 'specialist',
label: 'Specialists',
help: 'The right people to ask about this product.',
filters: {
projection: {
title: 1
}
}
}
...
在其他地方,我正在使用 find
来获取一些产品,但在这种情况下,我确实需要来自相关专家的更多数据。有没有办法告诉 Apostrophe "hey, this time also get me THESE fields from the join" 而不是使原始投影更加宽松或分两步进行(首先查询产品的专家 ID,然后查询所有专家)?
例如,我试过这个:
self.modulesReady = function() {
var req = self.apos.tasks.getAnonReq();
self.apos.docs.getManager('product').find(req, {}, {title:1, specialistsIds:1, _specialists: {slug: 1}}).toArray(function(err, pieces) {
// do something
})
},
但它仍然只是 returns 原始连接投影中定义的专家头衔。
目前无法以优雅的方式实现。为连接配置的过滤器在为获取连接的查询调用 toArray 之前调用,这意味着目前没有机会覆盖它们。查看joinDriver
方法的实现:
您当然可以在查询后重新获取连接的文档,但这不是一个很好的解决方案。
允许这样做的实现将涉及升级 withJoins
选项,该选项可用于通过传递连接名称数组来覆盖执行哪些连接,以还支持在该数组中包含对象.这些对象可以具有连接名称(或连接点路径)和游标过滤器的覆盖。然后必须在不引入 bc 中断的情况下将其传播到 joinDriver
,这是可能的,因为所涉及的方法确实采用 options
参数。