我正在尝试对MongoDB中的某些数字进行范围搜索。
我有以下两条记录。导入字段是最后两个,value
和type
。我希望能够获得具有值的记录:在某个范围内。
{ "_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);
答案 0 :(得分:1)
你是对的 - 它们被保存为字符串,$ gte可能会使用字典顺序。您使用的是哪个mongoDB驱动程序?你究竟如何插入这些记录?