0

我正在使用 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”。
我需要搜索整个单词。

4

3 回答 3

3

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

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

问候,

于 2012-10-10T14:49:04.673 回答
0

我希望它可以帮助你

 values ="val1";

我们在 DB 中使用的 CMD 为:

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

同样使用

query.put("key1", values)

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

如果错了请纠正我

于 2012-10-10T09:13:23.563 回答
0

如果您有上述 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

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

于 2012-10-10T14:42:15.720 回答