【问题标题】:mongodb conditional query greater than $gt returns zero results大于$gt的mongodb条件查询返回零结果
【发布时间】:2013-04-14 11:55:01
【问题描述】:

我有一个 mongodb 数据库,它有一个包含以下文档的 users 集合

{
  "_id": ObjectId("5161446e03642eab4a818fcd"),
  "id": "35",
  "userInfo": {
  "name": "xyz",
  "rollNumber": 121
   }
}

我想获取所有id大于特定值的行

@GET
@Path("/query")
@Produces({ MediaType.APPLICATION_JSON })
 public List<String> getLactionInfo(@QueryParam("from") int from) {
    BasicDBObject query = new BasicDBObject();
    // check if ids greater than 0
    query.put("id", new BasicDBObject("$gt", from));
    // get the collection of users
    DBCursor cursor = getTable("users").find(query);
    List<String> listUsers = new ArrayList<String>();
    while (cursor.hasNext()) {
        DBObject object = cursor.next();
        String id = cursor.next().get("_id").toString();
        object.put("_id", id);
        String objectToString = object.toString();
        listUsers.add(objectToString);

    }

    return listUsers;
}

当我调试我的代码时,它显示 listUsers 为空。此外,当我在控制台中手动运行以下查询时,我没有得到任何结果。

db.users.find({id:{$gt:60}})

【问题讨论】:

    标签: mongodb jax-rs mongodb-query


    【解决方案1】:

    样本数据中的id 存储为string。因此,$gt 检查试图将integer 与string 进行比较。

    如果您将id 值切换为integer,它应该会按预期工作。

    例如:

    db.test.insert( { "id": 40, "name": "wired" } )
    db.test.insert( { "id": 60, "name": "prairie" } )
    db.test.insert( { "id": 70, "name": "stack" } )
    db.test.insert( { "id": 80, "name": "overflow" } )
    db.test.insert( { "id": "90", "name": "missing" } )
    

    然后,测试:

    > db.test.find({"id": { "$gt": 60 }}).pretty()
    {
            "_id" : ObjectId("516abfdf8e7f7f35107081cc"),
            "id" : 70,
            "name" : "stack"
    }
    {
            "_id" : ObjectId("516abfe08e7f7f35107081cd"),
            "id" : 80,
            "name" : "overflow"
    }
    

    为了快速修复数据,您可以在 shell 中执行类似的操作(粘贴为一行并将 myCollection 更改为您的集合名称:

    db.myCollection.find().forEach(function(doc) { doc.id = parseInt(doc.id, 10); 
         db.test.save(doc); })
    

    【讨论】:

    • 感谢所有的帮助,错过一些微不足道的事情真是太愚蠢了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2017-06-15
    • 2015-02-26
    • 2012-07-26
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多