给定
a searchString "*** test text before string *** john doe | test string after string"
和
一个MongoDB文档:
{
"name": "John Doe",
"matchingWords": [
"john doe", "another string"
]
}
字符串
I WANT TO查询任何在searchString中找到的matchingWords字段(string[])中至少有一个元素的文档。!!matchingWords中的元素可能包含空格。
预期结果:找到上面的mongoDB文档,因为在searchString中找到了元素“john doe”。
问题
下面的代码只在matchingWords元素不包含空格时才有效.
private async findByMatchingWords(searchString: string): Promise<boolean> {
if (!searchString) return false;
const lowerCaseSearchStrings: string[] = searchString.toLowerCase().split(' ');
const results = await paymentPartyModel
.find<IPaymentParty>({
matchingWords: {
$exists: true,
$not: { $size: 0 }, // Check if array exists and is not empty
$in: lowerCaseSearchStrings,
},
})
.lean();
if (!results || results.length === 0) {
return false;
} else if (results.length === 1) {
this.info = results[0];
return true;
} else {
// 2 or more matches found...
Todo('What to do when more than one payment party matches the search?');
return false;
}
型
}
1条答案
按热度按时间bweufnob1#
使用
$indexOfCP
检查子字符串中是否存在matchingWord。如果matchingWord不在子字符串中,则将返回-1.$map
此结果从matchingWords
数组返回到布尔数组。使用$anyElementTrue
检查搜索字符串中的任何单词。字符串
Mongo Playground