0

I'm using Java Mongo DB driver.
Im doing some OR and AND operation to query the collection.

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

my Sample collection have 4 rows(JSON format might be wrong)

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

If i search for "val2"

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

i'm getting expected output 2nd and 4th row

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

if i search just "v"

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

i should get null set, but getting all the 4 rows, though the array have a character "v".
i need to search the whole word.

4

3 に答える 3

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 に答える