案子
所以我正在尝试使用 Java 对 Mongo 数据库执行查询。在 shell 中,我正在谈论的查询如下所示:
db.myCollection.find({ "array" : { "$in" : [ "foo" , "bar" ]}});
查询在 Java 中组合在一起,如下所示:
DBCursor cursor = myCollection.find(new BasicDBObject("array", new BasicDBObject("$in", items)));
在这里,变量items被定义为一个 String[],它是从其他地方传递的。它可以保存任何值,但在此示例中,它包含以下元素:
"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(); }
没用。
现在这里有一些真正的魔法给你们!我尝试在查询之前初始化字符串,如下所示:
String[] items = new String[]{ "foo", "bar" };
当我这样初始化它时,Mongo 不会转义引号并且查询有效。
所以我想知道这是什么诡计。以及我该如何解决这个问题。
谢谢大家的阅读!