Я новичок в MongoDB, и у меня действительно сложное требование, по которому я пытаюсь написать запрос. Можно ли как-нибудь написать запрос mongodb для этого требования?
Пример строки Mongodb:
Row1 --> {
array1:[
{ type=“abc”, action=“taken”, points=10},
{ type=“abc”, action=“given”, points=20},
{ type=“xyz”, action=“given”, points=40},
{ type=“xyz”, action=“taken”, points=30}
]
// other fields
}
Row2 --> {
array1:[
{ type=“xyz”, action=“given”, points=50},
{ type=“xyz”, action=“taken”, points=40}
]
// other fields
}
Row3 --> {
array1:[
{ type=“abc”, action=“taken”, points=100},
{ type=“abc”, action=“given”, points=200},
{ type=“xyz”, action=“given”, points=500},
{ type=“xyz”, action=“taken”, points=400}
]
// other fields
}
Требование:
Условия фильтра:
Возвращать строки только в том случае, если разница type="abc"
и (указывает, когда action="given"
- указывает, когдаaction="taken"
)> 0
Сортировка:
Строки должны быть отсортированы в порядке убывания разницы между (точки, когда action="given"
и type="xyz"
) и(указывает, когда action="taken"
и type="xyz"
)
Ожидаемый результат::
Row3 --> {
array1:[
{ type=“abc”, action=“taken”, points=100},
{ type=“abc”, action=“given”, points=200},
{ type=“xyz”, action=“given”, points=500},
{ type=“xyz”, action=“taken”, points=400}
]
// other fields
}
Row1 --> {
array1:[
{ type=“abc”, action=“taken”, points=10},
{ type=“abc”, action=“given”, points=20},
{ type=“xyz”, action=“given”, points=40},
{ type=“xyz”, action=“taken”, points=30}
]
// other fields
}
Объяснение выхода:: Строка 2 не будет поступать в выходные данные, поскольку условие фильтра не выполняется (в массиве нет элементов с type="abc"
)
Строка 3 идет перед строкой 1 в ответе из-за условия сортировки (это значение разницы больше в строке 3, чем в строке 1 -> (точки, когда action="given"
и type="xyz"
) и (точки, когда action="taken"
и type="xyz"
))