как я могу получить только результаты без нуля в mongoose.paginate - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу найти покупку, где ad.author - это то, что пользователь вошел в систему! Но в модели «покупка» у меня есть ссылка «модель объявления», и когда мне нужно ее найти, мне нужно заполнить все кошельки, так что я думаю. Проблема в том, что когда я использую mongoose.paginate, результаты не "хорошие", потому что когда ad.author отличается, у меня результат с ad:null ....

{
      "_id": "5cc6e3f30bca881bd1ade9af",
      "ad": null,
      "content": "Eu quero comprar",
      "interested": "5cc6e3a10bca881bd1ade9ae",
      "createdAt": "2019-04-29T11:45:55.061Z",
      "__v": 0
    },
    {
      "_id": "5cc6e4aa0bca881bd1ade9b1",
      "ad": {
        "_id": "5cc6e44f0bca881bd1ade9b0",
        "price": 300,
        "author": "5cc6e3a10bca881bd1ade9ae"
      },
      "content": "Eu quero comprar o seu curso, cara",
      "interested": "5cc4faacdd90ce534e5f184a",
      "createdAt": "2019-04-29T11:48:58.545Z",
      "__v": 0
    },
async index (req, res) {
    let results = []
    await Purchase.find()
      .populate('ad')
      .then(response =>
        response.map(el => {
          if (el.ad.author == req.userId) results.push(el)
        })
      )

    return res.json(results)
  }


async index (req, res) {
    const purchase = await Purchase.paginate(
      {},
      {
        page: parseInt(req.query.page) || 1,
        limit: 20,
        populate: {
          path: 'ad',
          match: { ad: { author: req.userId } },
          select: ['author', 'email', 'price']
        },
        sort: '-createAt'
      }
    )

    return res.json(purchase)
  }

То, что я хотел, это:

{
      "_id": "5cc6e4aa0bca881bd1ade9b1",
      "ad": {
        "_id": "5cc6e44f0bca881bd1ade9b0",
        "price": 300,
        "author": "5cc6e3a10bca881bd1ade9ae"
      },
      "content": "Eu quero comprar o seu curso, cara",
      "interested": "5cc4faacdd90ce534e5f184a",
      "createdAt": "2019-04-29T11:48:58.545Z",
      "__v": 0
    },
...