2011-10-30 17 views
1

MongoDBの一部の数値で範囲検索をしようとしています。数値のMongoDB範囲検索が期待どおりに機能しない

私は次の2つのレコードを持っています。インポートフィールドは、最後の2つの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"}}); 

そして再びどちらも2つの予想のレコードが(この場合は他のいくつかのが、返されます日付を含むレコードが返されます)。

上記の2つのレコードを取得する予定ですが、どちらも表示されません。

数値の前後に引用符があることがわかります。つまり、「文字列」として保存されているため、数値検索が機能しません。私は非常に明示的にDoubleとしてそれらを保存しているので、 ".0"が表示されています。

find(... query ...)コマンドが期待どおりに機能しないという別の理由がありますか? 。

EDIT:

挿入コードは、この(例外処理を削除)のようになります。

t.getObject()のgetValue()は文字列を返す - これが正常に動作しています。私はこれを使ってMongoDBに保存されることを期待していたDoubleをインスタンス化し、数値範囲の検索を許可します。

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

答えて

1

あなたはそうです - 文字列として保存され、$ gteはおそらく辞書順を使用します。どのmongoDBドライバを使用していますか?どのように正確にそれらのレコードを挿入しますか?

+0

Javaドライバを使用すると、挿入コードが投稿されます。うまくいけばそれが役に立ちます。 – Ankur

関連する問題