最近使用thinksjs + mongoose把博客后端的接口搭出来了,过程中遇到了一些问题,也收获了一些新的思路
收获
使用mongoose进行查询时的一些稍微复杂的查询方法,由于是初学,也记录一下:
关联查询
mongoose可以通过populate方法直接进行关联查询,例如我们有这样的两个实例:
|
|
可以直接这样进行关联查询:
|
|
聚合查询
可以使用aggregate进行聚合查询
主要聚合的OPERATION可以在这里进行查看
比如,针对文章列表,我们想要对其进行时间归档,可以按以下方式查询:
|
|
大体思路就是,使用$project修改文档结构,新增time和data字段,time表示对应的年和月,如2018-07。
然后按照对应的time进行分组,将同组的data插入到一个数组中。
最后按照_id进行排序。最后我们可以输出以下结构的数据了:
|
|
问题
think-mongoose对populate的支持问题
在使用think-mongoose进行populate时,会出现相关的model未进行注册
需要在return schema时手动实例对应的model
|
|
其中,types是根据model里的文件名称来进行对应的
使用Context.model返回对象无法确定其类型
我们在Controller中,通过this.mongoose()方法获取Model实例,但是返回的对象是通用的MongooseModel,
typescript无法识别真实实例上的方法,我们需要强制对其进行转化。
|
|
think.Mongoose实例上不能对mongoose的model进行友好提示
看了下think-mongoose的声明文件,针对think.Mongoose的声明如下:
|
|
可以看到其未集成mongoose的model声明,我们可以让其集成Model声明,这样在think.Mongoose实例上调用this.find等方法时,就会进行友好的提示及验证了
|
|