是否可以查询给定字符串中包含特定字段的文档?
例如,如果我有这些文件:
{a: 'test blabla'},
{a: 'test not'}
我想找到字段 a
完全包含在字符串 "test blabla test"
中的所有文档,所以 only the first document would be returned .
我知道我可以用 aggregation
使用 $indexOfCP
来实现它,并且 $where
和 mapReduce
也可以 . 如果可以使用标准的MongoDB运算符(例如,$ gt,$ in)在 find
查询中进行,我就会徘徊 .
谢谢 .
2 回答
我可以想到两种方法可以做到这一点:
选项1
使用 $where :
Explained: 查找在某个给定字符串中找到字段"a"的值的所有文档 .
这种方法是通用的,因为您可以运行任何您喜欢的代码,但从性能角度来看,建议较少 . 例如,它无法利用索引 . 阅读完整的$在哪里考虑:https://docs.mongodb.com/manual/reference/operator/query/where/#considerations
选项2
使用正则表达式匹配技巧,仅在某些情况下;下面的示例仅适用于匹配的字段值作为给定字符串的起始子字符串:
Explained: 分解"should-be-contained-within"字符串的组成部分,并与正则表达式的所有子可能性相匹配 .
对于你的情况,这个选项非常疯狂,但值得注意的是,因为可能存在特定情况(例如有限的命名空间匹配),你不必分解每个字母,而是一些非常有限的预定部分 . 在这种情况下,这个选项仍然可以使用索引,而不会遭受性能限制的$(只要正则表达式的复杂性不超过这个好处:)
您可以使用正则表达式进行搜索 .