【问题标题】:Parse query retreiving with certain conditions在特定条件下解析查询检索
【发布时间】:2019-05-29 17:24:04
【问题描述】:

我在课堂上进行查询我的问题是我有一些车牌,在哥伦比亚这里的车牌遵循 ABC 123。我需要我的查询只返回给我,在这种情况下,那些以 2 结尾

这就是我按照文档所做的...

private void queryForPlaca(String terminaEn){

    ParseQuery<ParseObject> query = ParseQuery.getQuery("TestDrive");
    query.whereFullText("Placa", terminaEn);
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            for (ParseObject obj:objects
                 ) {
                listaDeVehiculos.add(obj);
            }
            ListaVehiculosPicoYPlacaAdapter adapter= new ListaVehiculosPicoYPlacaAdapter(getActivity(),listaDeVehiculos);
            listadoTestDrive.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
    });
}

terminaEn 对许可证的变量查询根据日历中选择的日期放置车牌(在本例中为 2)。 我的问题是,不仅我的 listaDeVehiculos 没有返回任何值,而且我看到的另一个问题是它还返回了我不需要的值,例如 ABS 124、AXX 524、AEE 234 等。我应该如何修改我的查询? .

【问题讨论】:

    标签: android parse-platform parse-server parse-android-sdk


    【解决方案1】:

    您将无法使用文本搜索来执行此操作,因为 MongoDB 文本搜索功能仅匹配完整的术语。您将不得不使用正则表达式来做到这一点。请尝试以下操作:

    private void queryForPlaca(String terminaEn){
    
        ParseQuery<ParseObject> query = ParseQuery.getQuery("TestDrive");
        query.whereMatches("Placa", terminaEn + "$");
        query.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> objects, ParseException e) {
                for (ParseObject obj:objects) {
                    listaDeVehiculos.add(obj);
                }
                ListaVehiculosPicoYPlacaAdapter adapter= new ListaVehiculosPicoYPlacaAdapter(getActivity(),listaDeVehiculos);
                listadoTestDrive.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }
        });
    }
    

    请记住,正则表达式对数据库来说非常昂贵,因此创建适当的索引对您来说很重要。 TestDrive 集合中的 { Placa: 1 } 索引应该对您有很大帮助。供您参考,请看这里: https://docs.parseplatform.org/android/guide/#regular-expressions

    【讨论】:

    • 感谢 davi,我对此非常困惑,尤其是 terminaEn+"$"。您能否编辑代码或尝试不同的方法?。
    • whereMatches 允许您使用正则表达式在字符串字段中进行搜索。 $ 是一个特殊的字符,用于指定要在字符串末尾进行搜索。例如,如果您搜索“2”,它将匹配“234”、“123”和“012”。但如果您搜索“2$”,它只会匹配“012”。无论如何,如果你填充得更舒服,你也可以使用query.whereEndsWith("Placa", terminaEn),但它和你在这里看到的完全一样:github.com/parse-community/Parse-SDK-Android/blob/…
    • 为了获得最佳性能,您可以考虑的另一个想法实际上是在您的类中创建一个附加字段以仅存储车牌的最后一位数字,然后使用该字段进行常规查询数据库速度更快,成本更低。
    • 是的,davi y 喜欢最后一个,我所做的就是用最后一个值创建另一列!这是一个绝妙的主意,非常感谢!无论如何,我会将我所做的事情放在答案问题部分,以便人们可以学习!。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    相关资源
    最近更新 更多