使用Node.js将Object ID插入到现有Mongoose模式的数组中

时间:2013-06-13 23:52:07

标签: javascript node.js mongodb mongoose

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

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;

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

1 个答案:

答案 0 :(得分:0)

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

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

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