#node.js #mongodb #mongoose #mongodb-query
#node.js #mongodb #мангуст #mongodb-запрос
Вопрос:
У меня есть следующая модель мангуста
const Post = new Schema({
created_at: { type: Date, default: Date.now() },
updated_at: { type: Date },
postName: String,
postContent:String,
promoted: {
isPromoted: { type: Boolean, default: false, required: true },
promotedFrom: { type: Date },
promotedTill: { type: Date },
},
});
Пример документа
const Post = new Schema({
created_at: 2020-07-05T16:16:38.139 00:00,
postName: My first Post,
postContent:This is my furst post,
promoted: {
isPromoted: true,
promotedFrom: 2020-11-13T16:14:38.139 00:00,
promotedTill: 2020-11-20T16:14:38.139 00:00,
},
});
С помощью mongose я хочу запрашивать документы с увеличенным временем, которое должно составлять от 12.00 до 16.30 часов, независимо от какой-либо даты.
Заранее спасибо.
Ответ №1:
Отрегулируйте gt
и lt
, чтобы включить / исключить границы:
db.foo.aggregate([
{$match: {$expr: {
$and: [
{$gt: [ {$hour: "$promoted.promotedTill"}, 12 ]},
{$lte: [{$hour: "$promoted.promotedTill"},16]},
{$lt: [{$minute: "$promoted.promotedTill"},30]}
]}
}}
]);
Ответ №2:
проверьте этот пример
Я выполнил запрос довольно просто, без других полей.
Запрос такой:
db.collection.find({
"$and": [
{
"promoted.promotedFrom": {
"$gte": ISODate("yourdate")
}
},
{
"promoted.promotedTill": {
"$lte": ISODate("yordate")
}
}
]
})
В основном это поиск значения в диапазоне, используя $gte
(больше или равно) и $lte
(меньше или равно).
При использовании $and
оператора оба условия должны быть истинными.
Комментарии:
1. Спасибо за ответ. Мне нужно отфильтровать документ по часам в дате. не по числу
2. Я добавил пример с датами. Но, как я уже сказал, это точно то же самое. Mongo обрабатывает сравнение дат и чисел таким же образом. Итак, если запрос работает, сравнивая числа, он будет работать с датами. Проверьте второй пример.
3. Из вашего второго примера вы отфильтровали по дате, что даст мне весь документ между датой начала и датой окончания. но мое требование — фильтровать по времени начала и времени окончания.
4. Вы можете поместить нужную дату в запрос. Вы можете создать дату в js или что угодно и передать ее в запрос mongo. Это ваш вопрос или я что-то не понял?
5. Вопрос неправильно понят. Если мое время с 12.00, а время до 16.30, документ со временем 11.59 не должен быть извлечен