2016-05-20 13 views
0

mongodbコレクションの1つに、mm/dd/yyyy形式の日付文字列があります。今、私は 'mm'文字列を照会したいと思います。Mongodb Regex文字列の最初の2文字を照会します。

例、05/20/2016および04/05/2015。

文字列の最初の2文字を取得し、 '05'をクエリします。それで、私が得る結果は05/20/2016に過ぎないはずです。

どうすればこの問題を解決できますか?

ありがとうございます!

+0

これまでに何を試みましたか? –

+0

私はこの '/^[05] {2} /'を追加しようとしました。最初の2つの文字列のすべてのデータが '05'で取得されます。しかし、それは動作しないようです。私が何か間違っているかどうかは分かりません。コードは次のとおりです:{leaves_start:{$ regex: '/^[05] {2} /'}} – user3545006

+0

この場合はどうなりますか? '{leaves_start:{$ regex: '/^05 /'}}'これは、leaves_startフィールドが '05'で始まることを意味します。 –

答えて

2

正規表現溶液について、以下で十分で

var search = "05", 
    rgx = new RegExp("^"+search); // equivalent to var rgx = /^05/; 

db.collection.find({ "leave_start": rgx }); 

テスト

var leave_start = "05/06/2016", 
    test = leave_start.match(/^05/); 
console.log(test); // ["05", index: 0, input: "05/06/2016"] 
console.log(test[0]); // "05" 

又は

var search = "05", 
    rgx = new RegExp("^"+search), 
    leave_start = "05/12/2016"; 
var test = leave_start.match(rgx); 
console.log(test); // ["05", index: 0, input: "05/06/2016"] 
console.log(test[0]); // "05" 

別の代替の集約フレームワークを使用して、フィールドの最初の2つの文字を抽出し、次いで$matchオペレータは、上記新たなサブフィールドに基づいてドキュメントをフィルタリングします$substrオペレータを利用することである。

db.collection.aggregate([ 
    { 
     "$project": { 
      "leaves_start": 1, 
      "monthSubstring": { "$substr": : [ "$leaves_start", 0, 2 ] } 
     } 
    }, 
    { "$match": { "monthSubstring": "05" } } 
]) 

関連する問題