使用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:“嘿,这次还让我从联接中获得了这些字段”,而不是让原始投影更加宽松或分两步进行(首先在产品中查询专家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
})
},
但是它仍然只返回原始连接投影中定义的专家头衔。
答案 0 :(得分:1)
目前,这不可能以一种优雅的方式实现。在为获取联接的查询调用toArray之前,将立即调用为联接配置的过滤器,这意味着当前没有机会覆盖它们。请参见joinDriver
方法的实现:
您当然可以在查询后重新获取已加入的文档,但这不是一个很好的解决方案。
为此允许的实现将涉及升级withJoins
选项,该选项可用于通过传递连接名称数组来根本覆盖执行哪些连接,以支持在该数组中包括对象。这些对象可能具有联接名称(或联接点路径)和游标过滤器的替代特征。然后,必须将其传播到joinDriver
而不引入bc中断,这是可能的,因为所涉及的方法确实需要一个options
自变量。