Mongo DB:实现$ not查询

时间:2016-07-25 11:52:32

标签: mongodb

我正在尝试从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 =主

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

2 个答案:

答案 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"一起运行。

希望这能解决问题