【问题标题】:How to get Documents less than or greater than some value in mongodb using java如何使用java在mongodb中获取小于或大于某个值的文档
【发布时间】:2016-06-06 22:44:43
【问题描述】:

我想使用 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” }

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

    您的集合中的一个主要问题是employeeID 存储为字符串。如果您 100% 确定所有员工 ID 都是数字,那么我建议将字段从字符串转换为整数。尝试以下代码来转换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 确保这种转换不会显着影响您的应用。

    【讨论】:

      【解决方案2】:

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

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

      例如db.employee.find({employeeID : {$gt : 50, $lt : 500}})

      【讨论】:

      • 在控制台执行上述操作,仍然没有结果。但是employeeID 的值在50 到500 之间。我不明白这是什么原因.. :(。请帮帮我
      • 员工ID是否仅以数字格式存储?您能否编辑您的问题并发布示例员工 (bson) 对象?
      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2021-02-17
      • 2020-11-18
      • 1970-01-01
      • 2014-12-20
      相关资源
      最近更新 更多