#arrays #mongodb #mongodb-query #aggregation-framework
Вопрос:
проверьте условия
- если
value
больше, то равно 1000. - если значение
value
меньше, чем равно 2000. из параметров пользователь выберет либо1
или2
. Пользователь получает выходные данные в той же структуре, но только те документы, которые удовлетворяют условию в MongoDB
{
"data": [
{
"value": 1000
},
{
"value": 3000
},
{
"value": 1500
}
]
}
Комментарии:
1. Вы должны быть более ясны в том, что такое требуемый результат. вы хотите, чтобы ВСЕ предметы соответствовали условиям? вы хотите просто спроектировать элементы, соответствующие условиям?
2. Спасибо за комментарий, я хочу сопоставить базу документов при условии, что пользователь выберет, у меня есть 2 параметра, пользователь выберет
1
или2
. Если вы все еще понимаете , дайте мне знать, спасибо3. @Taki_ Я пытаюсь решить эту проблему, но получаю результат как истинный, так и ложный. Мне интересно получить значения, которые пользователь выбирает из параметра. исходя из параметров, пользователь будет либо
1
или2
4. итак, пользователь выбирает 1 или 2, и вы должны отправить первый или второй запрос? Вы можете сделать это в javascript и построить как динамический запрос на основе 1 или 2, или вы можете сделать это в базе данных, используя
$cond
5. Я не использую javascript , я использую только MongoDB
Ответ №1:
Этот запрос отвечает на вопрос :
- пользователь вводит 1 или 2, сохраненные в переменной приложения, скажем
var=parameter
- если он ввел 1 => мне нужны документы, в которых указаны данные.значение>>=1000
- если он ввел 2 => мне нужны документы, в которых указаны данные.значение>
*также предполагается, что данные(в вашем примере данных) являются массивом, а не коллекцией.
Запрос
- укажите,
{"eq" : [1 ,1]}
{"eq" : [parameter ,1]}
где параметр-это ваша переменная, имеющая значение, выбранное пользователем - работает с использованием условия, если пользователь ввел 1, выполняется первое сравнение , или если пользователь ввел 2, выполняется второе сравнение
- сравнение выполняется с агрегатными операторами, операторами запроса при сравнении массива(авто принимает минимальное или максимальное значение), но агрегатные операторы не выполняют автоматическое, поэтому здесь
$max
это делается с операторами$min
и. Я начинаю искать число, которое мы находим макс./мин., и мы сравниваем (например, операторы запросов автоматически выполняют)
db.collection.aggregate([
{
"$match": {
"$expr": {
"$cond": [
{
"$eq": [
1,
1
]
},
{
"$gte": [
{
"$max": "$data.value"
},
1000
]
},
{
"$lte": [
{
"$min": "$data.value"
},
2000
]
}
]
}
}
}
])
Комментарии:
1. я не хочу, чтобы возврат был истинным и ложным, мне интересно получить документы. в тот момент, когда я пытаюсь это сделать, я становлюсь правдивым и ложным с этими условиями.
2. Я хочу провести агрегацию и соответствовать условиям. и да
data
, это массив объектов, я хочу проверить состояниеvalue
объекта3. Благодаря его работам, у вас есть идея? Если у меня есть оператор в качестве параметра и значения, которое передается из параметра, проверяющего условие в наборе данных. например, я передаю оператор параметра как
$gte
иvalue
как 1000, чтобы он был более гибким.4. вы можете сделать то же самое в драйвере и сделать запрос меньшего размера, вы можете генерировать запрос динамически. Вы также можете использовать параметр для операторов, запросы MQL могут быть динамическими, выполняемыми из приложения.
5. вы-это название инструмента ? вы можете вставить ссылку ? о каком инструменте вы говорите для mongo db