2016-11-18 4 views
0

アプリケーション内に検索用語を入力し、各Mongoドキュメントのさまざまなフィールドを検索する検索フィールドがあります。当然、タイプString(現在は正規表現を使用しています)のフィールド内のデータを検索できますが、これはタイプDateのタイプのデータに対して行うか、Intと入力するとどうなりますか?MongoDBフィールド内でDateまたはIntの型で検索することはできますか?

注:フィールド内で検索を行うと、ユーザーが検索フィールドに「16」と入力すると、「16」を含む日付が返されます。 2014年1月1日または2014年3月16日整数の場合と同じ原則。

答えて

-1

はい、可能です。

find()に特定のデータ型のフィールドのみを調べるように指示できます。

$type comes handy. 

例と用法については、次のリンクを参照してください。 https://docs.mongodb.com/manual/reference/operator/query/type/

例は

db.addressBook.find({"field": "search-value"}, { "field" : { $type : "double" } }) 

は、検索値が一致している文書だけでなく、フィールドはdouble型であるかのように返されますでしょう。私が思う

+0

String型のフィールドの検索でこのメソッドを組み合わせるにはどうすればよいですか? – JoeTidee

+0

上記のクエリは、フィールドの型が「double」のドキュメントを返しませんか?そうであれば、これは元の質問に対処しません。 – JoeTidee

0

一つの簡単な方法は、 値はヴァル=「16」

db.foo.find({$where : "function(){ if(this.dateField.toString().indexOf(val)>= 0 || (""+this.intField).indexOf(val)>=0){return true;}}"}) 

を検索する場所を$を使用することができますは何基本的にあなたが試すことができ、文字列の中にフィールドの値を変換し、そこでそれを検索しています。下側は$がインデックスを使用しない場合は基本的にコレクションをスキャンし、$ whereを使用している場合は他の演算子を使用できません。

-1

私は画像を持っているので、コメントではなく別の回答として投稿しています。あなたが気づいた場合

enter image description here

は今、ID 2、ID 6との文書はまったく同じです。違いは、郵便番号フィールドのデータ型だけです。

私は$でクエリを実行しました。ご覧のとおり、一致するレコードのみを返します。私が$と$型の条件を取り除くと、両方のレコードが返されます。

私はこれがあなたの問題の解決に役立つことを願っています。

+0

質問は、データ型に基づいて返される結果を制限するかどうか尋ねません。これは、DateまたはInt32フィールド内の数字を検索するよう求めています。 – JoeTidee

+0

私はそれを完全に誤解して、実行可能な解決策を見つけようとします。 –

関連する問題