2015-03-06 4 views
0

У меня есть этот Mongoose запрос:MongoDB запросов с несколькими условиями и ломтиком

return Domain.find({domain:req.params.domain}) 
.where('date').equals(date) 
.exec(function (err, domain) { 
    if (!err) { 
     if (!isEmpty(domain[0].visitors)) { 
     domain[0]['visitors'] = domain[0].visitors.slice(0,99); 
     } 
    } 

Я хочу, чтобы нарезать непосредственно в базе данных, а не после того, как объект получения. Mongoose не может этого сделать или не документирован, или я не нашел документацию.

Таким образом, я возвращаюсь к native MongoDB-драйверу node.js, используя ключевое слово коллекции.

Мой код теперь выглядит следующим образом и не:

return Domain.collection.find(

    { "domain":req.params.domain }, 
    { "date":date }, 
    { "visitors": { $slice:100 } }, 
    function(err,domain){ 
     if (!err) { 
     res.status(200).send({ 
      domain:domain 
     }); 
     } 

Полный код: https://gist.github.com/nottinhill/b3837d4c913b9e5dd879

Я пытался в MongoDB консоли построить запрос, который будет работать, но не может получить этот простой запрос к Работа. Документация MongoDB не показывает, как запросить два условия. Я хочу:

Псевдо-код, что я хочу:

find 
    giveBack wholeDomainObject 
    where domain == domain 
    where date == date 
    also slice visitorsArray 

ответ

3

проекции одно определение объекта. Также вы «запрашиваете» вещи, а не запрашиваете совпадения в прогнозах, отличных от конкретных критериев соответствия полей. $slice это особый случай, который не исключает другие поля в проекции по умолчанию:

Domain.collection.find(
    { "domain":req.params.domain, "date": date }, 
    { "visitors": { "$slice":100 } }, 
    function(err,domain){ 
    // process results here 
    } 
); 

Возможно также отметить, что $slice здесь (так же, как JavaScript) является определенным «количество записей», а не n-1 ссылки как в индексе массива.

+1

Спасибо за это объяснение. Теперь, к сожалению, я вижу «TypeErr: преобразование структуры ciruclar в JSON». Обратите внимание: внутри обратного вызова есть res.status (200) .send ({domain: domain}); – nottinhill

+0

@SirBenBenji Я понятия не имею, что это значит в контексте этого вопроса. Это кажется немного «странным», хотя ваш вопрос состоял в том, чтобы сделать «срез» в массиве в возвращаемом документе, но ваш код предполагает, что вы даже не хотите возвращать это свойство вообще. Возможно, вам нужно попросить вас в другом вопросе, чтобы сделать ваш вопрос более ясным для всех, кто может ответить. –

Смежные вопросы