Пн goose: Как получить документы, упорядоченные по значению, но заполнить предел случайными документами - PullRequest
0 голосов
/ 19 марта 2020

Допустим, у меня есть эта коллекция:

Продукты

{"sku": "a", "date": "now",       "approved": true}
{"sku": "a", "date": "yesterday", "approved": true}
{"sku": "b", "date": "now",       "approved": true}
{"sku": "c", "date": "now",       "approved": true}
{"sku": "d", "date": "yesterday", "approved": true}
{"sku": "e", "date": "yesterday", "approved": false}
{"sku": "f", "date": "yesterday", "approved": true}
{"sku": "g", "date": "now", "approved": false}

Я хочу найти все документы, где утверждено = true и sku = 'a', ограничив каждую страницу запроса 4 документами. и заказ по дате. Рандомизация других документов для выполнения 4 документов на запрос результатов.

Ожидаемый результат:

{"sku": "a", "date": "now",       "approved": true}
{"sku": "a", "date": "yesterday", "approved": true}
{Random doc with approved = true}
{Another random doc with approved = true}

Мой код неверен, поскольку дублирует результаты и выполняет вызовы в db. Как это можно улучшить и исправить?

var limit = 4;

var query = {
  approved: true,
  sku: 'a'
};

var queryNot = {
  approved: true,
  sku: {$not : 'a'}
};

Products.find(query).sort('-data').skip(0).limit(limit).exec((err, doc) => {
  var dif = limit - docs.length;
  result = docs;

  if (dif <= 0){
    callback(result);
  }else{
    Products.find(queryNot).sort('-data').skip(0).limit(dif).exec((err, doc) => {
      docs = docs ? docs : [];
      callback(result.concat(docs.sort(function() {
        return .5 - Math.random();
      })));
    });
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...