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)
})