Как использовать Aggregate Mongo с Paginate? [Дубликат]

Возможно, проблема в конфигурации почтового сервера, чтобы избежать подобных проблем или вам не нужно беспокоиться о проблеме с почтовым сервером, я рекомендую вам использовать PHPMailer , это плагин у которого есть все необходимое для отправки почты, единственное, что вы должны учесть, это иметь SMTP-порт (порт: 25 и 465), включен

require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';

$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
       //Server settings
       $mail->SMTPDebug = 0;                                 
       $mail->isSMTP();                                      
       $mail->Host = 'smtp.gmail.com';  
       $mail->SMTPAuth = true;                               
       $mail->Username = 'correo@gmail.com';                 
       $mail->Password = 'contrasenia';                           
       $mail->SMTPSecure = 'ssl';                          
       $mail->Port = 465;                                    

       //Recipients
       $mail->setFrom('correo@gmail.com', 'my name');    
       $mail->addAddress('destination@correo.com');               

       //Attachments
       $mail->addAttachment('optional file');         // Add files, is optional

       //Content
       $mail->isHTML(true);// Set email format to HTML
       $mail->Subject = utf8_decode("subject");
       $mail->Body    = utf8_decode("mail content");
       $mail->AltBody = '';
       $mail->send();
     }
     catch (Exception $e){
        $error = $mail->ErrorInfo;
     }

9
задан Blakes Seven 24 March 2016 в 05:52
поделиться

1 ответ

Ваша переменная ids будет построена из «строк», а не ObjectId значений.

Мангустировать «autocasts» строковые значения для ObjectId в их правильный тип в регулярных запросах, но это не происходит в конвейере агрегации , как описано в номере № 1399.

Вместо этого вы должны выполнить правильное литье, чтобы ввести вручную:

ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })

Затем вы можете использовать их в своем конвейере:

{ "$match": { "_id": { "$in": ids } } }

Причина в том, что конвейеры агрегации «обычно» изменяют структуру документа, и поэтому mongoose не делает никаких предположений о том, что «схема» применяется к документу на любой стадии конвейера.

Можно утверждать, что этап «первого» конвейера, когда это этап $match, должен сделать это, поскольку документ действительно не изменяется. Но сейчас это не так.

Любые значения, которые могут быть «строками» или, по крайней мере, не корректным типом BSON, должны быть вручную отобраны для соответствия.

20
ответ дан Blakes Seven 20 August 2018 в 19:10
поделиться
  • 1
    Вот и все, теперь работает. но обычно я бросаю id как строку в findOneAndUpdate или другой запрос, и он отлично работает, проблема только в совокупности? – Muhammad Fasalir Rahman 24 March 2016 в 05:59
  • 2
    @MuhammadFasalirRahman Это именно то, на что я ответил. A .find() может использовать Schema, который, конечно, имеет тип по умолчанию ObjectId для поля _id. Агрегационные конвейеры do not используют Schema, как я уже объяснил. – Blakes Seven 24 March 2016 в 06:06
  • 3
    Это не работает в мангусте 5 – Mina Luke 28 February 2018 в 02:28
  • 4
    Мне потребовалось три дня, чтобы добраться сюда; знак .. Я создал лямбда внутри моего статического метода схемы const castUserId = (userId) => mongoose.Types.ObjectId(userId) теперь я счастлив – timebandit 19 June 2018 в 17:23
Другие вопросы по тегам:

Похожие вопросы: