我需要根据两个字段对我的mongoDB集合执行搜索:title
(一个字符串)和tags
,这是一个数组。
假设这是该集合的示例数据:
{
title: 'A tornado article',
tags: [
'nature',
'storm'
]
},
{
title: 'Just another article',
tags: [
'hurricane',
'type I'
]
},
{
title: 'Different article',
tags: [
'tornado',
'type II'
]
}
我的搜索字符串是const term = 'tornado type I'
,然后我应该把所有文件都作为
我尝试从此开始执行搜索:
Collection.find(
{
$or: [
{ 'meta.title': new RegExp(term, 'i') },
{ 'meta.tags': term }
]
}
)
因此,如果搜索词仅为tornado
,我将获得第一个文档。使用我的示例术语字符串,我得不到任何结果。
答案 0 :(得分:0)
如果希望将包含所需的任何标记的对象返回到$in
运算符,它将选择字段值等于指定数组中任何值的文档。
但要这样做,你需要传递一系列条款,为此我已将你的条款分开
" "
并将该变量传递给$in
,如此
var term = 'tornado type I nature';
var splitted = term.split(' ');
Collection.find({
$or: [{
'title': new RegExp(term, 'i')
}, {
"tags": {
$in: splitted
}
}
]
})
或者,如果您还希望regex搜索标记,则可以使用|
加入数组以构建正则表达式语句,之后您可以像这样传递它。
var term = 'tornado type I nature';
var splitted = term.split(' ');
var splittedRegex = new RegExp(splitted.join('|'), 'i');
Colleciton.find({
$or: [{
'title': new RegExp(term, 'i')
}, {
"tags": {
$in: [splittedRegex]
}
}
]
})