2017-01-15 8 views
1

前提条件でテーブルのフィールドを作ります:はMongoDBのテキスト検索可能

apiRouter.get('/api/searchPosts', function(req, res, next){ 
    postModel.find(
     { $text : { $search : req.query.text } }, 
     { score : { $meta: "textScore" } } 
    ) 
    .sort({ score : { $meta : 'textScore' } }) 
    .exec(function(err, posts) { 
     if(posts){ 
      res.json({ 
       posts  : posts 
      }); 
     } else { 
      res.send('Post does not exist'); 
     } 
    }); 
}); 

私が達成しようとしていること:

私は私の投稿テーブル内のフィールドを作りたいがテキストが検索可能タイトルと呼ばれます。

マイスタック:

MongoDBは、(マングース有する)NodeJS、角

私のアプローチ:

:前提条件で述べたよう

、Iラインを追加しました

postSchema.index({title: 'text'}); 

さらに、以下のコマンドを端末で1回実行しましたコレクションが作成されています:

db.posts.createIndex({"title":"text"}) 

問題:私はURLからこれをアクセスすると、それは最初に動作しますが、数週間後に、それは私が得る(動作を停止し

「ポストは存在しません。 '何も変更せずに!)。それは、その後数週間などのために働いて開始し

db.posts.createIndex({"title":"text"}) 

:それは再び作業を取得するために、私はコレクションを削除し、新鮮なものを作ると、コマンドを実行する必要があります。

私は間違っていますか?私はこれらの数週間で何が起こるかについての傾向を見ていない。私はこの問題に数週間立ち往生していますので、誰かが助けてくれれば非常に感謝しています。

おかげで、 Shayan

+0

私はそこで何をするのでしょうか、それは「Post does not exist」を返す代わりに、私はそのエラーから何かを返します(実際のエラーと思われます)。たぶんあなたはタイムアウトやこれに似た何かを得ているでしょう。確認するMongoログなどはありますか? –

+0

エラーのある素晴らしい提案。私はちょうど1年のための開発に関与しているので、noobの間違いを言い訳してください。 エラー:エラー:MongoError:$ textクエリでテキストインデックスが必要ですが、すでに行っています。どういうわけか、mondoDB自身が私がコマンドを実行したことを忘れてしまっています。ログにも何かがあるかどうかがわかります。 –

+0

ちょっと@AndreiNeagu - 私は以下の私の答えを掲載しました。提案していただきありがとうございます。将来の視聴者のために何かが再び壊れた場合、この投稿を更新しておきます。 –

答えて

1

最後に、解決策は以下の通りだった:

var postSchema = new Schema({ 
    postID:   String, 
    title:   { type: String, text: true }, 
    description:  String 
}); 

これは、これまでのトリックでした。

私はこれをもう一度チェックし、数週間おきに壊れているかどうかを確認します。それがあれば投稿を更新します。

「err」の提案を記録するためのAndrei Neaguに感謝します。時には明白なものがちょうど見逃されます

+0

ようこそ。だから、実際のエラーメッセージは何でしたか? –

+0

これは、エラーメッセージです。エラー:MongoError:$ textクエリにテキストインデックスが必要です。 「posts」という新しいテーブル/コレクションを作成し、terminal> mongoのdb.posts.createIndex({"title": "text"})コマンドを実行したとき、それはうまくいきました。しかし、それは数週間おきに働き始めませんでした。 –

+0

私はこれに注目して、変更があれば投稿を更新します。 –

関連する問題