ショートバージョン:Posts
コレクションのうち、/web/
または他の用語と一致する別個のタグの配列を取得する必要があります。MongoDbのMapReduceで "オートコンプリート"タグ
私は、「オートコンプリート」フィールドを養うためのMapReduceパターンの実装に関する疑問を抱えています。これが最善のアプローチだと思いますか? 、私のような結果があるだろうな/web/
として検索考える
{
'title': 'A great post',
'tags': ['web2.0', 'monetize', 'cloud', 'someOtherDumbTerm']
}
{
'title': 'Another great post',
'tags': ['monetize', 'seo-optimization', 'web3.0']
}
:["web2.0", "web3.0"]
マイMapReduceの機能のような行く:
var mapFn = function(){
if(this.tags){
this.tags.forEach(function(value){
if (value.match(/web/i)){
emit('web', value);
}
});
}
};
var reduceFn = function(key, values){
return {result:values};
};
db.runCommand({
mapreduce: 'posts',
out: {inline:1},
map: mapFn,
reduce: reduceFn,
query: {tags:/web/}
});
私Posts
コレクションのような書類を持っています私は別のコレクションにタグを格納することを考えていて、それらのための通常の検索を行いますが、それは何年ものRDBMS学習の痕跡が残っているということです。私はまた、これらの種類のクエリのパフォーマンスやその他の意味については全く知らないし、ドキュメントはこのケースではあまり役に立たないようだ。
ありがとうございます!私は実際にのみの分析のためのMapReduceを使用して終了
をやってしまった何を
タグを言いました。
私は、それらを元の用語を保持するだけでなく、正規表現の検索のために基本的なASCII(すなわち、アクセントなしなど)に正規化することを考慮しながら、別のコレクションに保存します。次に、別のコレクションのpost
IDにtag
オブジェクトIDを参照します。
このすべては、別のクライアントにサービスを提供するために別のアプリに変わりました。それは私の特別な必要性のための最良の解決策であることが分かった。
私はそれについて考えていませんでしたが、おそらくこれが最善のアプローチです: 'out:{merge:" tagIndexes "}'を使用して、それをリアルタイムで照会してください。ありがとう! – Roberto
私はまったく別のことをやってしまいましたが、あなたの答えは私がMap/Reduceの良い使い方を理解する助けになりました。ありがとう! – Roberto