Mongoose在exec上运行实例方法

时间:2015-07-01 05:44:39

标签: mongoose

我希望在字段中填充详细信息.location.displayAddress'每次请求文档时使用一些逻辑。这可能吗?想避免在我的模型中存储冗余数据。

在我的Venue Controller中,我有40多个不同的调用此模型。我想避免在返回的每个文档上手动调用getShortName()。有没有办法自动运行此函数并在模型中定义此逻辑而不是控制器?

这是这个模型:

declare @year int
set @year = YEAR(GETDATE())

;with mths as(
    select 1 as mth, DATENAME(MONTH, cast(@year*100+1 as varchar) + '01')  as monthname
union all
    select mth+1, DATENAME(MONTH, cast(@year*100+(mth+1) as varchar) + '01') from mths where mth<MONTH(GETDATE()) 
)
select  m.mth Month, isnull(count,0) as Count
from    mths m 
left join (
    select   MONTH([createdDate]) as Month,COUNT([id]) as Count
    from     [Notifications]
    where    YEAR([createdDate]) = @year 

    group by MONTH([createdDate])
 ) s on m.mth = s.Month 

1 个答案:

答案 0 :(得分:2)

您想要的是架构上的.virtual()方法,该方法将根据定义为在方法中返回的文档的其他属性在文档中显示该属性:

VenueSchema.virtual('details.displayAddress').get(function() {
    return this.name + this.location.unit + ' ' + this.details.location.floor ...etc
});

它没有设置&#34; perperntly&#34;在对象中但可访问并可在需要时序列化(默认)。

它实际上在实例方法后面this page进一步列出了一点。不像&#34; getters / setters&#34;数据不存储在集合对象中。