我有一个现有的新闻文章部分,我想为更精确的搜索添加类别,我的架构如下:
var ArticleSchema = new Schema({
title: String,
body: String,
author: {
type: Schema.Type.ObjectId,
ref: 'User',
required: true
},
image: String,
catagories: [{
type: Schema.Types.ObjectId, ref: 'Catagory'
}],
meta: {
created: {
type: Date,
'default': Date.now,
set: function(val) {
return undefined;
}
},
updated: {
type: Date,
'default': Date.now
}
}
});
ArticleSchema.statics.search = function (str, callback) {
var regexp = new RegExp(str, 'i');
return this.find({'$or': [{title: regexp}, {body: regexp}]}, callback);
};
module.exports = ArticleSchema;
var CatagorySchema = new mongoose.Schema({
name: { type: String, unique: true },
});
module.exports = CatagorySchema;
我想要一个用户友好的输入来选择类别(甚至不知道什么是最好的,无论是复选框还是简单的逗号分隔文本输入等)。我的问题是获得此类输入并将其转换为文章模式(提供类别存在)的最佳实践是什么。如果有人能指出我正确的方向,我将不胜感激。感谢。
答案 0 :(得分:0)
保留要在数组中搜索的类别名称
{
categories: ["cat1", "cat2"]
}
然后你可以为它添加一个索引并在查询中执行$。当前架构不是很好,因为您无法在单个查询中查找类别,但需要首先解析所有“类别”链接。