0

我有一个现有的新闻文章部分,我想添加类别以进行更精细的搜索,我的架构如下:

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;

我想要一个用户友好的输入来选择类别(甚至不知道这里最好的是什么,无论是复选框还是简单的逗号分隔文本输入等)。我的问题是获得这种输入并将其转换为文章模式的最佳实践是什么(假设存在类别)。如果有人能指出我正确的方向,将不胜感激。谢谢。

4

1 回答 1

0

将要搜索的类别名称保存在数组中

{
  categories: ["cat1", "cat2"]
}

然后您可以为其添加索引并执行 $in 查询。当前模式不是很好,因为您无法在单个查询中查找类别,而是需要首先解析所有“类别”链接。

于 2013-08-12T12:31:45.913 回答