Если у вас возникли проблемы с отправкой писем с помощью PHP, рассмотрите альтернативу, например PHPMailer или SwiftMailer .
Обычно я использую SwiftMailer всякий раз, когда мне нужно для отправки писем с PHP.
require 'mail/swift_required.php';
$message = Swift_Message::newInstance()
// The subject of your email
->setSubject('Jane Doe sends you a message')
// The from address(es)
->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
// The to address(es)
->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
// Here, you put the content of your email
->setBody('New message
Here goes the rest of my message
', 'text/html');
if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
echo json_encode([
"status" => "OK",
"message" => 'Your message has been sent!'
], JSON_PRETTY_PRINT);
} else {
echo json_encode([
"status" => "error",
"message" => 'Oops! Something went wrong!'
], JSON_PRETTY_PRINT);
}
Подробнее о том, как использовать SwiftMailer, см. в официальной документации .
Ваша переменная ids
будет построена из «строк», а не ObjectId
значений.
Мангустировать «autocasts» строковые значения для ObjectId
в их правильный тип в регулярных запросах, но это не происходит в конвейере агрегации , как описано в номере № 1399.
Вместо этого вы должны выполнить правильное литье, чтобы ввести вручную:
ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })
Затем вы можете использовать их в своем конвейере:
{ "$match": { "_id": { "$in": ids } } }
Причина в том, что конвейеры агрегации «обычно» изменяют структуру документа, и поэтому mongoose не делает никаких предположений о том, что «схема» применяется к документу на любой стадии конвейера.
Можно утверждать, что этап «первого» конвейера, когда это этап $match
, должен сделать это, поскольку документ действительно не изменяется. Но сейчас это не так.
Любые значения, которые могут быть «строками» или, по крайней мере, не корректным типом BSON, должны быть вручную отобраны для соответствия.
.find()
может использоватьSchema
, который, конечно, имеет тип по умолчаниюObjectId
для поля_id
. Агрегационные конвейеры do not используютSchema
, как я уже объяснил. – Blakes Seven 24 March 2016 в 06:06const castUserId = (userId) => mongoose.Types.ObjectId(userId)
теперь я счастлив – timebandit 19 June 2018 в 17:23