Node.js Mongoose如何加入搜索结果

Node.js Mongoose如何加入搜索结果,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我有一个定义如下的文章模型: var ArticleSchema = new Schema({ type: String ,title: String ,content: String ,hashtags: { type: [String] ,index: true } ,meta: { tags: [String] //anything ,category: String

我有一个定义如下的文章模型:

var ArticleSchema = new Schema({
    type: String
    ,title: String
    ,content: String
    ,hashtags: {
        type: [String]
        ,index: true
    }

    ,meta: {
        tags: [String] //anything
        ,category: String
    }
现在我需要按类别、标签和关键字进行搜索

    var words = queryString.split(' ')

    if (searchType === constant.searchTypes.category) {
        criteria['meta.category'] = {$in: words}
    }
    else if (searchType === constant.searchTypes.tag) {
        //todo
    }
    else if (searchType === constant.searchTypes.keyword) {
        //todo
    }

    var query = Article.find(criteria)
    helper.populateCommonFieldsForQuery(query)
    query.exec(function(err, articles) {
        if (err)
            return next(err)
        return res.json(articles)
    })
查询字符串仅采用“word1 word2 word3”格式。按类别搜索很容易,因为一篇文章只有一个类别。我可以简单地使用$in-premise

但文章有多个标记,我想列出所有文章,其中任何标记与任何查询词匹配(即set intersect不为空)


我还需要做关键字搜索,我需要检查标题或内容匹配。我可以在一个查询中完成吗

标准['meta.tags']={$in:words}
表达式也可用于
标记。和
$或
运算符可用于查询标题和内容值。
MongoDB官方文档:

事实上,这个问题对我来说并不清楚。
搜索类型
有if条件。 如果条件不是,我更喜欢下面的代码(我没有测试它)

不应跳过对所有查询字段的索引


祝你好运。

但是标记字段是一个数组。标题和内容都是长字符串。标记正在工作。但内容不起作用,因为它不是标记化的
$或
运算符只执行逻辑
过程,如
$或[expression1,expression2,…]
,如果表达式值为'true',则返回true。因此,将返回适当的文档。关于
内容
必须有另一个问题。如果您无法解决问题,请编辑您的问题,并添加MongoDB中的一些示例文档和您的代码,如果与问题不同,则使用这些示例文档和代码。我会尽力帮助你的。
var words = queryString.split(' ')
var criteria = $or[
    { 'meta.category': {$in: words} },
    { 'meta.tags': {$in: words} },
    { title: {$in: words} },
    { content: {$in: words} },
]
var query = Article.find(criteria)
helper.populateCommonFieldsForQuery(query)
query.exec(function(err, articles) {
    if (err)
        return next(err)
    return res.json(articles)
})