MongoDB-查找给定字符串中是否包含字段值

MongoDB-查找给定字符串中是否包含字段值,mongodb,Mongodb,是否可以查询特定字段包含在给定字符串中的文档 例如,如果我有以下文件: {a: 'test blabla'}, {a: 'test not'} 我想查找字符串“test blabla test”中包含字段a的所有文档,因此只返回第一个文档 我知道我可以使用aggregation使用$indexOfCP进行聚合,也可以使用$where和mapReduce进行聚合。我想知道是否可以使用标准的MongoDB操作符(例如,$gt,$in)在find查询中执行此操作 谢谢 您可以使用正则表达式进行搜索

是否可以查询特定字段包含在给定字符串中的文档

例如,如果我有以下文件:

{a: 'test blabla'},
{a: 'test not'}
我想查找字符串
“test blabla test”
中包含字段
a
的所有文档,因此只返回第一个文档

我知道我可以使用
aggregation
使用
$indexOfCP
进行聚合,也可以使用
$where
mapReduce
进行聚合。我想知道是否可以使用标准的MongoDB操作符(例如,$gt,$in)在
find
查询中执行此操作


谢谢

您可以使用正则表达式进行搜索

db.company.findOne({"companyname" : {$regex : ".*hello.*"}});

我可以想出两种方法:

选择1 使用$where

db.someCol.find( { $where: function() { return "test blabla test".indexOf(this.a) > -1; } }
解释:查找字段“a”的值在某个给定字符串中的所有文档

这种方法是通用的,因为您可以运行您喜欢的任何代码,但从性能角度来看,推荐的代码较少。例如,它不能利用索引。阅读完整的$where注意事项:

选择2 仅在某些情况下使用正则表达式匹配欺骗;以下示例仅适用于字段值作为给定字符串起始子字符串的匹配:

db.someCol.find( { a : /^(t(e(s(t( (b(l(a(b(l(a( (t(e(s(t)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?$/ } )
解释:分解“应包含在”字符串的组成部分,并与正则表达式的所有子可能性进行匹配


对于您的情况,这个选项非常疯狂,但值得注意的是,可能存在一些特定的情况(例如有限的名称空间匹配),您不必分解每个字母,而是分解一些非常有限的预定部分。在这种情况下,这个选项仍然可以使用索引,并且不会受到$where性能的影响(只要正则表达式的复杂性不超过它的优点:)

如果字符串包含在字段中,则这是另一种方式。
{a:'test'}
也完全包含在
的“test blabla test”
中。你在找最接近的匹配吗?@Veeram对不起,我修复了文件。(这也让我感到困惑:D)此功能的请求仍然是开放的,谢谢,但正如我在问题中所说的,我知道使用
$where
可以实现此功能,而使用
aggregate
可以实现其他功能。我想知道是否有可能使用标准的MongoDB操作符。是的,选项2的一个变体根据某些情况进行了调整。否则,JohnnyHK提到的特性请求可能会在将来出现。德国劳埃德船级社