【问题标题】:How to query whole word in Java MongoDB如何在 Java MongoDB 中查询整个单词
【发布时间】:2012-10-10 08:52:59
【问题描述】:

我正在使用 Java Mongo DB 驱动程序。
我正在做一些 OR 和 AND 操作来查询集合。

QueryObj = new BasicDBObject("key1",Pattern.compile("v",Pattern.CASE_INSENSITIVE));
QueryList.add(QueryObj);
DBObject OrQuery = new BasicDBObject("$or", QueryList);
DBCursor cursor = MyCollection.find(OrQuery);  

我的示例集合有 4 行(JSON 格式可能有误)

{
"key1": ["val1","val3"]
},
{
"key1": ["val2","val3"]
},
{
"key1": ["val3"]
},
{
"key1": ["val1","val2"]
}

如果我搜索“val2”

QueryObj = new BasicDBObject("key1",Pattern.compile("val2",Pattern.CASE_INSENSITIVE));  

我得到了预期的第 2 行和第 4 行输出

{
"key1": ["val2","val3"]
},
{
"key1": ["val1","val2"]
}  

如果我只搜索“v”

QueryObj = new BasicDBObject("key1",Pattern.compile("v",Pattern.CASE_INSENSITIVE));

我应该得到空集,但得到所有 4 行,虽然数组有一个字符“v”。
我需要搜索整个单词。

【问题讨论】:

  • 那么当您使用val1 作为关键字时会发生什么?
  • h4bo - 如果我使用“val1”,我会得到预期的行,但如果我只给出“v”,我也会得到所有包含字符“v”的行。
  • 您必须重新表述您的问题 - 我在这里看不到问题所在。你能提供一个集合、搜索查询、预期结果和实际结果的例子吗?

标签: java mongodb conditional-operator


【解决方案1】:

您的意思是要搜索完整的单词 'v' - 在这种情况下,我相信您的模式如下,其中 ^ 表示单词的开头,$ 表示单词的结尾。

QueryObj = new BasicDBObject("key1",Pattern.compile("^v$",Pattern.CASE_INSENSITIVE));

问候,

【讨论】:

    【解决方案2】:

    希望对你有帮助

     values ="val1";
    

    我们在 DB 中使用的 CMD 为:

     db.collection_name.findOne({ key1: "val1"})
    

    同样使用

    query.put("key1", values)
    

    在语句中使用findOne() 而不是find()

    如果有错请指正

    【讨论】:

    • 对不起陌生人,我需要获取多行但需要搜索整个单词......
    【解决方案3】:

    如果您有上述 4 个文档,则可以使用以下查询仅检索您需要的文档:

     db.collection.find({"key1": "val2"})
    

    这会返回:

     { "_id" : ObjectId("507587fdf1ab6b3d9e0151d3"), "key1" : [ "val2", "val3" ] }
     { "_id" : ObjectId("50758801f1ab6b3d9e0151d5"), "key1" : [ "val1", "val2" ] }
    

    (假设您的收藏名为“收藏”)。

    在 Java 驱动程序中正确的调用应该是:

    Mongo mongo = new Mongo("localhost", 27017);
    DB db = mongo.getDB("test");
    BasicDBObject query = new BasicDBObject("key1", "val2");
    db.getCollection("collection").find(query);
    //omitting try catch
    

    如果我理解你的问题是正确的,你不需要在这里使用模式。 希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 2018-07-23
      • 2011-07-02
      • 1970-01-01
      • 2017-07-26
      • 2014-09-17
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多