Я использую базу данных NoSQL, которая не допускает условия равенства прогнозируемых атрибутов. Например, операции с неравномерностью, такие как select a from table where a > 10
и разрешены select a from table where b < 10
, но select a from table where a = 10
не допускается. Конечно, мне нужно использовать равенство в моем случае, поэтому я хочу превратить операции равенства в операцию неравенства.Получить предыдущие и следующие значения строки
Поэтому мне нужно получить запись по электронной почте. Если бы я мог пойти select email from table where email = '[email protected]'
, но это не разрешено, поэтому я хочу получить лексикографическое значение прямо до [email protected]
и значение сразу после. Таким образом, запрос будет выглядеть следующим образом:
select email from table where email < [1 value above] and email > [1 value below]
Таким образом, заявление будет еще вернуться [email protected]
. У меня проблемы, но как это сделать.
Обычно, чтобы сравнить строки, я иду "[email protected]".compare("[email protected]")
, чтобы увидеть, какой из них больше, а какой меньше. Этот метод сравнивает значения как-то на основе лексикографии, но как? Мой вопрос заключается в том, как получить лексикографическое значение прямо под строкой и лексикографическое значение сразу после строки?
Какая странная NoSQL поддерживает '<' and '>', но не '='? – Andreas
@Andreas Google Datastore - Если вы используете проекционные запросы, вы не можете проецировать атрибут, который вы используете в условии фильтра равенства. https://cloud.google.com/appengine/docs/python/datastore/projectionqueries – user2924127
Помогает ли этот тайный аромат NoSQL оператору 'NOT'? Почему бы просто не выбрать 'select * from T, а не (email <: val или email>: val)'? – nbrooks