2016-07-25 136 views
0

我想实现从Java代码以下查询:

{ "Post Text" : { "$not" : /.*golf.*/i}} 

我的Java代码:

BasicDBObject not = new BasicDBObject(); 
not.append("$not", "/.*golf.*/i"); 

BasicDBObject query = new BasicDBObject(); 
query.put("Post Text", not); 

当我运行上面的查询,得到这个日志:

游标ID = 0,NS = journaldev.Rotunda,查询= { “后的文本”:{ “$不是”: “/ 高尔夫球/I”}},numIterat ed = 0,readPreference = primary

正则表达式周围的多余引号产生问题。有人可以帮我解决这个问题吗?

+0

哪个潜水员版本? – mtj

+0

使用mongo版本:2.12.3 –

+0

对不起,没有我的帮助......只做3.x – mtj

回答

0

使用3.x,您可以使用Filters工具类为您创建各种查询。在你的情况,你需要下面的结构:

Bson myFilter = Filters.not(
    Filters.eq("Post Text", 
     Pattern.compile(".*golf.*", Pattern.CASE_INSENSITIVE))); 

使用3.x的驱动程序来执行这样的查询是沿着线:

MongoClient mongoClient = new MongoClient(); 
MongoCollection<Document> coll = mongoClient.getDatabase("test").getCollection("mycoll"); 
coll.find(myFilter); // do something with the FindIterable returned here 
0

你可以尝试这样的事情

Pattern textRegex = Pattern.compile(".*golf.*", Pattern.CASE_INSENSITIVE); 
BasicDBObject not = new BasicDBObject("$not", textRegex); 
BasicDBObject query = new BasicDBObject("Post Text", not); 

当您传递一个模式时,mongo驱动程序会自动将其设为正则表达式。如果您调试并看到代码,它将与"$regex"一起运行。

希望这可以解决问题

+0

@Yoyo:上述解决方案是否适合你? – Nattyk