mongoose如何基于关联表进行筛选并分页
问题背景
如下两个schema
Columns: { active: Boolean, name: String } News: { column: {type: Schema.Types.ObjectId, ref: 'columns'}, title: String, content: String }
column
中active
有被配置修改的需求,news
表存在大量插入需求
问题描述
如何对
news
进行分页查询,查询条件为column.active
为true
?如何对查询条件进行
count
?
解决尝试
1.
News.find().populate({
path: 'column',
match: { active: true }
}).limit(10).skip(0).exec(function(err, news) {
if (err) {
console.log(err);
} else {
console.log(news);
}
});
输出结果:
news:[
{
"title": "这篇资讯的所属栏目正在开放",
"column": {
"active": true,
"createdAt": "2017-04-11T10:35:29.747Z",
"id": "58ecc960a4db1e3fc01c2d6d"
},
"updatedAt": "2016-11-29T08:55:42.000Z",
"id": "5923ab21415f8f3bc43f8515"
},
{
"title": "这篇资讯的所属栏目已被屏蔽",
"column": null,
"updatedAt": "2016-11-29T08:47:18.000Z",
"id": "5923ab21415f8f3bc43f83bd"
}
]
期望获取的结果是只有column中active为true的数据
尝试失败
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
1,您说的这种情况,populate就是这样子的,所以大部分时候populate做一个document的关联的时候很好用,但是做多个document满足条件的关联,就是您遇到的这种情况,没有关联上的,会返回null。
2,建议您在data model上做修改如下:
1)您使用的data model方法是reference的方法,是传统的范式建模的方法。在MongoDB里面用起来比较辛苦;
2)不妨考虑使用反范式建模。名字听起来很高级,就是使用sub-document来实现关联。在您的需求中,将columns作为子文档嵌入到news当中,做起来更简单一些。
供参考。
Love MongoDB! Have fun!