我有以下架构:
var PostModel = mongoose.model('PostModel', {
text : {type : String, default: ''},
created_at : Date
});
text
字段可能很长(大约1000个字符)。当我在帖子列表页面上查询帖子时,我需要查询所有包含text
字段的帖子,仅限150个字符。
哪种方法最好?是否可以通过使用猫鼬本身进行剪切,还是应该在使用PostModel.find() in success callback
进行检索后剪切文本?
答案 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
字段时都会更新。