如何使用java在mongodb中获取小于或大于某个值的Documents

时间:2016-06-05 12:11:15

标签: java mongodb

我希望使用java获取员工ID大于50且小于500的所有可用文档。

我试过这样的事。

BasicDBObject gtQuery = new BasicDBObject();
gtQuery.put("employeeID", new BasicDBObject("$gt", 50).append("$lt", 500));
DBCursor cursor = collection.find(gtQuery);
while(cursor.hasNext()) {
        System.out.println(cursor.next());
};

但我没有得到任何结果,即使我在数据库中的该范围之间有文档。请告诉我原因......

集合中文档的样本格式。

{ " EMPLOYEEID" :" 450", "名称" :" AAA" }

2 个答案:

答案 0 :(得分:0)

查询似乎很好,但是,我会检查它正在执行的集合(并确保它正确)。

另外,调试它的另一种方法是在控制台中打印查询并在mongo shell中执行相同的操作,

e.g。 db.employee.find({employeeID : {$gt : 50, $lt : 500}})

答案 1 :(得分:0)

您的集合中的一个主要问题是employeeID存储为String。如果您100%确定所有employeeID都是数字,那么我建议将字段从String转换为Integer。请尝试以下代码来转换employeeID字段:

    DBCursor cursor = collection.find();
    while (cursor.hasNext()) {
        BasicDBObject current_object = (BasicDBObject) cursor.next();

        current_object.update(
                new BasicDBObject().append("_id", current_object.getObjectId("_id"), 
                        new BasicDBObject()
                                .append(
                                        "$set", 
                                        new BasicDBObject("employeeID", Integer.parseInt(current_object.getString("employeeID"))
                                        )
                                )
                )
        );
    }

然后,您可以使用您的代码来获得员工50< employeeID< 500.
确保此转换不会显着影响您的应用。