Допустим, у меня есть эта коллекция:
Продукты
{"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();
})));
});
}
});