如何防止Java';s Mongo驱动程序在查询中转义引号 案件

如何防止Java';s Mongo驱动程序在查询中转义引号 案件,java,arrays,json,mongodb,escaping,Java,Arrays,Json,Mongodb,Escaping,因此,我尝试使用Java对Mongo数据库执行查询。在shell中,我谈论的查询如下所示: db.myCollection.find({ "array" : { "$in" : [ "foo" , "bar" ]}}); String[] items = new String[]{ "foo", "bar" }; 查询是用Java编写的,如下所示: DBCursor cursor = myCollection.find(new BasicDBObject("array", new Basic

因此,我尝试使用Java对Mongo数据库执行查询。在shell中,我谈论的查询如下所示:

db.myCollection.find({ "array" : { "$in" : [ "foo" , "bar" ]}});
String[] items = new String[]{ "foo", "bar" };
查询是用Java编写的,如下所示:

DBCursor cursor = myCollection.find(new BasicDBObject("array", new BasicDBObject("$in", items)));
这里,变量items被定义为一个字符串[],它从其他地方传递。它可以保存任何值,但在本例中,它包含以下元素:

"foo", "bar";
问题 问题就从这里开始。召唤

cursor.getQuery()
返回

{ "array" : { "$in" : [ "\"foo\"" , "\"bar\"" ]}}
这不会返回任何结果。如您所见,用于Java的Mongo驱动程序添加了引号并对其进行了转义

我试过了
  • 复制数组,并确保所有内容都已删除。然后将其传递给查询

    String[] test = new String[items.length];
    for(int i = 0; i < items.length; i++){
        test[i] = items[i].trim();
    }
    
    当我这样初始化它时,Mongo不会转义引号,查询也会工作


  • 所以我想知道这是什么骗局。我该如何解决这个问题


    谢谢大家的阅读

    您不应该试图阻止Mongo驱动程序转义字符串文本。转义是为了确保最终的json或bson在语法上是正确的。另外,不可能改变Mongo驱动程序将最终消息格式化到服务器的方式,这是合理的,因为它正确地实现了服务器协议


    在您的特定情况下,您的意图是使用字符串文本
    foo
    bar
    ,但您的数据包含文本
    “foo”
    “bar”
    ,从而导致您观察到的逻辑问题。

    您的
    数组是否实际包含文本字符串
    “foo”
    “bar”
    ?如果引号是字符串的一部分,它们将被转义,这是一种正确的行为。@PawelVeselov好吧,我会倒霉的。在调试过程中,我将结果输出到控制台,完全忽略了它们周围有引号的事实。先生,你刚刚给了我答案。帽子尖!如果这解决了你的问题,请@PawelVeselov提供答案,如果他没有,请自己发布。