2017-07-20 6 views
0

集計で次の正規表現を使用することはできません。私はたくさんの例を読んでいますが、うまくいきません。私が望むのは、3文字以下の単語を除外することです(例:1 a2 aaa a-)。しかし、彼らはまだ現れる。

これは私の正規表現です(私は正しいと思います)\b\w?\w?\w?\bです。

そしてここに集約され:

Meteor.publish("topics", function() { 
    ReactiveAggregate(this, Articles, [ 
    { 
     $project: { 
       topic: { $split: ["$title", " "] }, 

       article: "$$ROOT" 
     } 
    }, 
    { 
     $unwind: { 
       path: "$topic" 
     } 
    }, 
    { 
     $match: { 
       topic: { $nin: ["sports", "\b\w?\w?\w?\b"] } 
     } 
    }, 
    { 
     $group: { 
       _id: "$topic", 
       count: { $sum: 1 }, 
       articles: { $push: "$article" } 
     } 
    } 
    ], { clientCollection: "clientTopic" }); 
}); 

例:

/* Article 1 */ 
{ 
    "_id" : "SB4mKAxaBijQXnS73", 
    "title" : "Messi signs new contract with Barcelona" 
} 
/* Article 2 */ 
{ 
    "_id" : "rhqioBkePzGCrRFLp", 
    "title" : "Messi has 30 years old" 
} 
/* Article 3 */ 
{ 
     "_id" : "X6LochRZw32op39W8", 
     "title" : "President of Argentina visits Messi" 
} 

私はのようなコレクションを取得したい:言葉new、あなたが見ることができるように

Messi ==> {_id: "Messi", articles: [Article 1, Article 2, Article 3], count: 3 } 
signs ==> {_id: "signs", articles: [Article 1], count: 1 } 
contract ==> {_id: "contract", articles: [Article 1], count: 1 } 
with ==> {_id: "with", articles: [Article 1], count: 1 } 
Barcelona ==> {_id: "Barcelona", articles: [Article 1], count: 1 } 

years ==> {_id: "years", articles: [Article 2], count: 1 } 

President ==> {_id: "President", articles: [Article 3], count: 1 } 
Argentina ==> {_id: "Argentina", articles: [Article 3], count: 1 } 
visits  ==> {_id: "visits", articles: [Article 3], count: 1 } 

has,30,old,長さが3文字以下であるため、3210は表示されません。

thesタイトルの単語sportsの記事はコレクションに含まれていませんが、正規表現に一致するものは含まれています。

+0

含めるべき文書と除外すべき文書の例を表示できますか?これにより、クエリ条件が実際にどのようなものであるべきかが明確になります。 –

+0

とにかく正規表現が正しく表示されません。 ''/\ b \ w {3} \ b/'' –

+0

@NeilLunnでなければなりません。私は "ノイズ"や "停止"の言葉(や、や、それ、など...)を取り除きたい。 –

答えて

0

配列の各要素は、単語の前に^を付けて読み込みます。 [ '^仕事'、 '^ accus'、 '^惑星']

OR

するvar言葉= [/ハロー/、/ ^世界/];正規表現 db.getCollectionの//配列(」単語コレクション ')。find({"word":{$ in:words}});

+0

あなたは正規表現の前に '^'を付けるべきだと言っていますか?私は、このような: '{ $試合:{ トピック:{$ニン:[ "スポーツ"、 "???^ \ \ B \ワット\ wで\ B"]} } }、 ' でも、まだそれらの単語がコレクションに含まれています。 –