MongoDB (mongoose) 检索子串

MongoDB (mongoose) retrieve substring

假设我的博客有一些很长的 posts。

所以,我想在 "preview mode" 中显示我的 post 的列表,例如只显示文本的前 50 个字符。

简单的答案就是这样做:

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

通过这种方式,我们可以从特定集合中检索所有数据。 如果每个 post 有超过 3 KB 的数据检索 30 posts 在数据传输和处理方面似乎非常低效。

所以,我想知道是否有办法从数据库中检索已经切片的字符串?

或者至少您对我的问题有更好的解决方案?

是的,您可以使用 $substr 运算符进行如下查询:

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

编辑:

$substr 已从 mongodb 3.4 中弃用,因为它仅对 ASCII 字符的字符串具有明确定义的行为。如果您遇到 UTF-8 问题,请考虑升级到 mongodb 3.4 以使用 $substrCP 运算符 所以你的查询变成:

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

截至今天,mongodb 3.4 仅可用于开发,但生产版本应该很快发布