如下兩個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的数据 尝试失败
1,您說的這種情況,populate就是這樣子的,所以大部分時候populate做一個document的關聯的時候很好用,但是做多個document滿足條件的關聯,就是您遇到的這種情況,沒有關聯上的,會回傳null。
2,建議您在data model上做修改如下:
1)您使用的data model方法是reference的方法,是傳統的範式建模的方法。在MongoDB裡面用起來比較辛苦;
2)不妨考慮使用反範式建模。名字聽起來很高級,就是使用sub-document來實現關聯。在您的需求中,將columns作為子文件嵌入到news當中,做起來更簡單一些。
供參考。
Love MongoDB! Have fun!