【问题标题】:Creating query in MongoDB Java driver在 MongoDB Java 驱动程序中创建查询
【发布时间】:2018-01-22 06:58:24
【问题描述】:

我有一个包含以下字段的文档集合:

  • description
  • state
  • field_num

我想将光标返回到所有满足以下条件的文档:

  • 状态为“完成”
  • 且field_num大于100
  • 并且他们的描述不包含“abc”模式?

这个查询正确吗?

DBObject query = new BasicDBObject("$gte",99)
    .append("status","complete")
    .append("description", new BasicDBObject("$not", ".*abc")))

DBCursor cursor = collection.find("collection name", query, projection)

【问题讨论】:

  • 你试过了吗?成功了吗?
  • “那个查询正确吗”? -> 执行查询,检查结果。
  • 顺便说一下,$gte 是“大于或等于 99”。那肯定是“大于100”
  • 我试过了,做 cursor.hasNext() 时出错。虽然我的查询可能有问题。

标签: java mongodb mongodb-query mongodb-java


【解决方案1】:

这个查询:

状态为“完成”

并且 field_num 大于 100

并且他们的描述不包含“abc”模式?

...可以表示如下:

Bson query =
        // where field_num > 100
        new BasicDBObject("field_num", new BasicDBObject("$gte", 100))

        // where status is ' complete'
        .append("status", new BasicDBObject("$eq", "complete"))

        // where description does not contain 'abc' 
        // note: this uses inverse matching since the $not operator
        // is not allowed with the $regex operator
        .append("description", new BasicDBObject("$regex", "^((?!abc).)*$"));

在 Java 驱动程序 > 3.0 的版本中,这也可以更简单地表示为:

Bson query= Filters.and(
        Filters.gt("field_num", 100),
        Filters.eq("status", "complete"),
        Filters.regex("description", "^((?!abc).)*$")
);

查询执行如下:

MongoClient mongoClient = ...;

MongoCollection<Document> collection = mongoClient.getDatabase("...")
    .getCollection("...");

collection.find(query)

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多