对数字进行MongoDB范围搜索无法按预期工作

时间:2011-10-30 06:38:53

标签: java mongodb numbers find

我正在尝试对MongoDB中的某些数字进行范围搜索。

我有以下两条记录。导入字段是最后两个,valuetype。我希望能够获得具有值的记录:在某个范围内。

{ "_id" : ObjectId("4eace8570364cc13b7cfa59b"), "sub_id" : -1630181078, "sub_uri" : "http://datetest.com/datetest", "pro_id" : -1630181078, "pro_uri" : "http://datetest.com/datetest", "type" : "number", "value" : "8969.0" }
{ "_id" : ObjectId("4eacef7303642d3d1adcbdaf"), "sub_id" : -1630181078, "sub_uri" : "http://datetest.com/datetest", "pro_id" : -1630181078, "pro_uri" : "http://datetest.com/datetest", "type" : "number", "value" : "3423.0" }

当我执行此查询时

> db.triples.find({"value":{$gte: 908}});

所以我做了这个查询:

> db.triples.find({"value":{$gte: "908"}});

并且两个预期记录都没有返回,(尽管在这种情况下会返回包含日期的其他记录)。

我希望得到上面的两条记录,但都没有显示。

我可以看到数字周围有引号 - 这是否意味着它们被存储为“字符串”,因此数字搜索不起作用?我已经非常明确地将它们保存为Double,因此出现了“.0”。

或者是否有其他原因导致find(... query ...)命令无法正常工作?

编辑:

插入代码如下所示(删除了异常处理):

t.getObject()。getValue()返回一个String - 这个工作正常。然后我用它来实例化一个Double,这是我希望保存到MongoDB,并允许数值范围搜索。

triple.put("value",new Double(t.getObject().getValue()));
DBCollection triples;
triples = db.getCollection("triples");
triples.update(triple,triple,true,false); 

1 个答案:

答案 0 :(得分:1)

你是对的 - 它们被保存为字符串,$ gte可能会使用字典顺序。您使用的是哪个mongoDB驱动程序?你究竟如何插入这些记录?