2017-01-15 137 views
1

先決條件一個表的字段:讓MongoDB中搜索文本

數據庫與收藏已經創建職位,它的架構如下:

module.exports = function(mongoose){ 
var Schema = mongoose.Schema; 

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

mongoose.model('post', postSchema, 'posts'); 
postSchema.index({title: 'text'}); 

}; 

節點的路由器通過API處理:

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(與貓鼬),角

我的方法:

如在先決條件提到的,我已經添加了行:

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

此外,我已經在終端運行下面​​的命令一次收藏已創建:

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

問題

當我訪問該從URL,它的工作原理開始,但幾個星期後,它停止工作(我得到「後不存在'不作任何改變!)。爲了讓它恢復正常工作,我必須刪除收集並重新創建一個,然後運行命令:

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

然後開始工作幾周,等等。

我做錯了什麼?我沒有看到這幾周發生的事情的趨勢。我一直在這個問題上堅持了幾個星期,所以如果有人可以幫助,它將不勝感激。

感謝, 傻眼

+0

我會在那裏做什麼,而不是返回'Post不存在',我會從那個錯誤(我認爲是實際的錯誤)返回一些東西。也許你正在得到一個超時或類似的東西。任何mongo日誌檢查等? –

+0

重要的建議與錯誤。我已經參與了不到一年的發展,所以請原諒這個noob錯誤。 '錯誤'是:錯誤是:MongoError:$文本查詢所需的文本索引 - 但我已經這樣做了。不知何故,mondoDB本身已經忘記了我已經運行了這個命令。我會看看日誌中是否有任何內容。 –

+0

嘿@AndreiNeagu - 我在下面發佈了我的答案。感謝您的建議。如果未來的觀衆再次突破,我會保持這篇文章的更新。 –

回答

1

最後,溶液呈如下:

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

這並獲得成功爲止。

我會再次檢查一遍,看看它是否每隔幾周都會發生這種情況。如果有,請更新帖子。

謝謝安德烈Neagu記錄'錯誤'的建議。有時候,顯而易見的錯誤會被錯過

+0

不客氣。那麼,你得到的實際錯誤信息是什麼? –

+0

這是錯誤消息:錯誤是:MongoError:$文本查詢所需的文本索引。 奇怪的是,當我創建一個名爲'posts'的新表/集合並在terminal> mongo中運行命令:db.posts.createIndex({「title」:「text」})時它工作正常。但是,它每兩週停止工作。 –

+0

我會密切注意這一點,如果有任何更改,我會更新我的帖子。 –