如何剪切在猫鼬中查找文档的文本?

时间:2015-04-06 20:47:06

标签: node.js mongodb mongoose

我有以下架构:

var PostModel = mongoose.model('PostModel', {
    text : {type : String, default: ''},
    created_at : Date
});

text字段可能很长(大约1000个字符)。当我在帖子列表页面上查询帖子时,我需要查询所有包含text字段的帖子,仅限150个字符。

哪种方法最好?是否可以通过使用猫鼬本身进行剪切,还是应该在使用PostModel.find() in success callback进行检索后剪切文本?

1 个答案:

答案 0 :(得分:5)

您可以使用虚拟机。来自docs

  

虚拟是您可以获取和设置的文档属性,但确实如此   没有坚持到MongoDB。 getter对格式化或者有用   结合领域。

在您的情况下,您可以像这样使用它:

var PostSchema = new mongoose.Schema({
    text : {type : String, default: ''},
    created_at : Date
});

PostSchema.virtual('truncated_text').get(function() {
  return this.text.substring(0, 150);
});

var PostModel = mongoose.model('PostModel', PostSchema);

然后,您可以使用Post#truncated_text代替Post#text,例如:

Post.findOne({}, function(err, post) {
    console.log(post.truncated_text);
});

虚拟字段不会保存到数据库中,每次更新text字段时都会更新。