我希望使用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" }
答案 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.
确保此转换不会显着影响您的应用。