2016-11-14 147 views
0

比方說,我有一些很長的職位博客。的MongoDB(貓鼬)檢索串

所以,我想我的顯示在「預覽模式」的帖子列表,文本的情況下僅前50個字符。

答案很簡單,要做到這一點:

Post.find(
    (err, posts) => { 
     if(err) return console.log(err); 
     posts.forEach(
      post => { 
       console.log('post preview:', post.data.substr(0,50) + '...'); 
      } 
     ) 
    } 
) 

這樣我們檢索特定集合中的所有數據。 如果每個帖子都有超過3 KB的數據檢索,30個帖子在數據傳輸和處理方面似乎非常低效。

所以,我想知道如果有檢索數據庫已經切片的字符串的方法嗎?

或者至少你對我的問題更好的解決方案?

+1

有['$ substr'(https://docs.mongodb.com/v3.2/reference/operator/aggregation/substr/)。 – robertklep

回答

1

是的,你可以使用$ SUBSTR運營商,這樣的查詢:

db.collection.aggregate(
    [ 
    { 
     $project: 
      { 
      preview: { $substr: [ "$data", 0, 50 ] } 
      } 
     } 
    ] 
) 

編輯:

$ SUBSTR從MongoDB的3.4反對,因爲它不僅擁有良好爲ASCII字符串定義行爲。如果你面對UTF-8的問題,考慮升級爲使用$ substrCP操作 讓你的查詢變得MongoDB的3.4:

db.collection.aggregate(
    [ 
    { 
     $project: 
      { 
      preview: { $substrCP: [ "$data", 0, 50 ] } 
      } 
     } 
    ] 
) 

截至今日,MongoDB的3.4僅可用於開發,但量產版應該很快被釋放

+0

OK,這個怎麼樣的錯誤:'MongoError:$ SUBSTR:無效的範圍,結束索引是在UTF-8 character'的中間? –

+0

@Lepta看到我的編輯 – felix