#node.js #mongodb #mongoose #mongodb-query
#node.js #mongodb #mongoose #mongodb-запрос
Вопрос:
На самом деле, я поднимаю этот вопрос после того, как попробовал ответы на предыдущие вопросы. но я не нахожу никакой подсказки, поэтому я спрашиваю
Пытаюсь добиться:
В агрегации mongoose я использую агрегацию конвейеров для получения документов из коллекции с помощью следующего запроса
$match: {
$and: [
{
$expr: {
$eq: ["$device_id", "$device_id"]
}
},
{
date: {
"$gte": "$billing_cycle_startdate",
"$lte": endOfDay
}
}
]
}
дата выставления счета будет: 2020-12-31T00:00:00.000Z по следующему запросу
{
$addFields: {
billing_cycle_startdate: {
$concat: [
year, "-", month, "-", "$device_details.billing_cycle"
]
},
}
},
{ $set: { billing_cycle_startdate: { $toDate: "$billing_cycle_startdate" } }},
но этот запрос возвращает пустые результаты
если я запущу
{
date: {
"$gte": new Date("2020-12-31T00:00:00.000Z"),
"$lte": endOfDay
}
}
он возвращает результаты, как и ожидалось
есть ли какой-либо другой способ преобразовать 2020-12-31T00:00:00.000Z в формат, доступный для запроса, без использования функции new Date (), а также хотите знать, в чем разница между 2020-12-31T00:00:00.000Z и новой датой («2020-12-31T00:00:00.000Z»)
Есть какой-либо другой способ выполнить этот запрос??
Заранее спасибо ..!
Комментарии:
1. Если результатов вообще нет, должно быть, этап сопоставления исключает все. Можем ли мы увидеть образец документа и полный конвейер?
2. Спасибо за беспокойство, я нашел, что не так с моим запросом. это просто синтаксическая ошибка при использовании переменной @Joe
Ответ №1:
Наконец, после нескольких дней страданий я обнаружил, что не так с моим запросом
Я просто забываю использовать синтаксис let в своем конвейере, чтобы указать переменную, которая является billing_cycle_startdate, и забываю использовать ее на этапе поля конвейера
Конвейер не может напрямую обращаться к полям входного документа. Вместо этого сначала определите переменные для полей входного документа, а затем ссылайтесь на переменные на этапах конвейера.
для получения дополнительной информации: нажмите здесь
затем я изменил свой запрос следующим образом
{
$lookup: {
from: "name",
let: {
device_id: "$budget.device",
billing_cycle_startdate: "$billing_cycle_startdate"
},
pipeline: [
{
$match: {
$and: [
{
$expr: {
$eq: ["$device_id", "$device_id"]
}
},
{
$and: [
{
$expr: {
$gte: ["$date", "$billing_cycle_startdate"],
},
},
{
$expr: {
$lte: ["$date", endOfDay],
}
}
]
}
]
}
}
],
as: "dailyenergylogs"
}
},