我正在尝试从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,query = {“Post Text”:{“$ not”:“/。 golf。 / i”}},numIterated = 0, readPreference =主
正则表达式周围的额外引号会产生问题。有人可以帮我解决这个问题吗?
答案 0 :(得分: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
答案 1 :(得分:0)
您可以尝试这样的事情
Pattern textRegex = Pattern.compile(".*golf.*", Pattern.CASE_INSENSITIVE);
BasicDBObject not = new BasicDBObject("$not", textRegex);
BasicDBObject query = new BasicDBObject("Post Text", not);
当您传递模式时,mongo驱动程序会自动将其设为正则表达式。如果您调试并查看代码,它将与"$regex"
一起运行。
希望这能解决问题