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 仅可用于开发,但生产版本应该很快发布
假设我的博客有一些很长的 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 仅可用于开发,但生产版本应该很快发布