如何防止Java';s Mongo驱动程序在查询中转义引号 案件
因此,我尝试使用Java对Mongo数据库执行查询。在shell中,我谈论的查询如下所示:如何防止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
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提供答案,如果他没有,请自己发布。