搜尋

首頁  >  問答  >  主體

node.js - mongoose如何基於關聯表進行篩選並分頁

問題背景

  1. 如下兩個schema

    Columns: {
        active: Boolean,
        name: String
    }
    
    News: {
        column: {type: Schema.Types.ObjectId, ref: 'columns'},
        title: String,
        content: String
    }
  2. columnactive有被設定修改的需求,news表格存在大量插入需求

#問題描述

  1. 如何對news進行分頁查詢,查詢條件為column.activetrue

  2. 如何對查詢條件進行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的数据
尝试失败
PHPzPHPz2766 天前1828

全部回覆(1)我來回復

  • 滿天的星座

    滿天的星座2017-05-24 11:37:40

    1,您說的這種情況,populate就是這樣子的,所以大部分時候populate做一個document的關聯的時候很好用,但是做多個document滿足條件的關聯,就是您遇到的這種情況,沒有關聯上的,會回傳null。

    2,建議您在data model上做修改如下:

    1)您使用的data model方法是reference的方法,是傳統的範式建模的方法。在MongoDB裡面用起來比較辛苦;

    2)不妨考慮使用反範式建模。名字聽起來很高級,就是使用sub-document來實現關聯。在您的需求中,將columns作為子文件嵌入到news當中,做起來更簡單一些。

    供參考。

    Love MongoDB! Have fun!

    回覆
    0
  • 取消回覆