我的产品架构看起来像这样:
var ProductSchema = new mongoose.Schema({
name: { type: String, required: true },
description: String,
comments: [{ type: Number, ref: 'Comment' }],
comment_count: { type: Number, default: 0 },
});
文本搜索的索引名称和描述:
ProductSchema.index({ name: 'text', description: 'text' });
我像这样使用文本搜索:
this.find(
{ $text: { $search: keywords } },
{ score: { $meta: "textScore" } }
)
.sort({ score: { $meta: "textScore" } })
.populate({
path: 'comments',
select: 'creator body date_created',
options: {
sort: { date_created: -1 }
}
})
.exec( function(products) {
... //-> snipped for brevity
});
尽管搜索工作正常,但返回数据集上的某些项目没有comment_count
字段,该字段应该默认为0。
我认为问题是当我尝试返回文本搜索分数时,因为我删除了这一行:{ score: { $meta: "textScore" } }
。列表中的所有项目都有一个comment_count字段。
我希望两者兼顾,因为通过文本分数对数据进行排序很有意义。
注意:
我想请注意,我在搜索查询期间调用了this
,因为我将其作为Product
的静态方法。
我还要注意,只要添加或删除评论并且在搜索查询期间未填充评论,comment_count
就会更改。但不确定这些信息是否有用,如果相关的话。