gpt4 book ai didi

java - 如何防止 Java 的 Mongo 驱动程序转义查询中的引号

转载 作者:可可西里 更新时间:2023-11-01 09:36:47 28 4
gpt4 key购买 nike

案例

所以我尝试使用 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 驱动程序添加了引号并对其进行了转义。

我试过了

  1. 复制数组,并确保所有内容都被修剪掉。然后将其传递给查询。

    String[] test = new String[items.length];
    for(int i = 0; i < items.length; i++){
    test[i] = items[i].trim();
    }

    没用。

  2. 现在给大家带来一些真正的魔法!我尝试在查询之前初始化字符串,如下所示:

    String[] items = new String[]{ "foo", "bar" };

    当我这样初始化它时,Mongo 不会对引号进行转义并且查询有效。


所以我想知道这是什么样的诡计。以及我如何解决这个问题。

感谢大家的阅读!

最佳答案

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

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

关于java - 如何防止 Java 的 Mongo 驱动程序转义查询中的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646139/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com