У меня есть этот 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
Спасибо за это объяснение. Теперь, к сожалению, я вижу «TypeErr: преобразование структуры ciruclar в JSON». Обратите внимание: внутри обратного вызова есть res.status (200) .send ({domain: domain}); – nottinhill
@SirBenBenji Я понятия не имею, что это значит в контексте этого вопроса. Это кажется немного «странным», хотя ваш вопрос состоял в том, чтобы сделать «срез» в массиве в возвращаемом документе, но ваш код предполагает, что вы даже не хотите возвращать это свойство вообще. Возможно, вам нужно попросить вас в другом вопросе, чтобы сделать ваш вопрос более ясным для всех, кто может ответить. –