的MongoDB(猫鼬)检索串

问题描述:

比方说,我有一些很长的职位博客。的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

是的,你可以使用$ 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