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

时间:2017-04-05 14:56:37

标签: mongodb

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

例如,如果我有这些文件:

{a: 'test blabla'},
{a: 'test not'}

我想找到字段a完全包含在字段"test blabla test"中的所有文档,因此只会返回第一个文档

我知道我可以使用aggregation $indexOfCP使用$wheremapReducefind。如果可以使用标准的MongoDB运算符(例如,$ gt,$ in)在 if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.LeftShift) && Scoped) speed = 8; else if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.S)) speed = 4; else speed = 0; 查询中进行搜索,我就会徘徊。

感谢。

2 个答案:

答案 0 :(得分:1)

我可以想到两种方法可以做到这一点:

选项1

使用 $ where

db.someCol.find( { $where: function() { return "test blabla test".indexOf(this.a) > -1; } }

解释:查找在某个给定字符串中找到字段“a”的值的所有文档。

这种方法是通用的,因为您可以运行任何您喜欢的代码,但从性能角度来看不太建议。例如,它无法利用索引。在此处阅读完整的$ where注意事项:https://docs.mongodb.com/manual/reference/operator/query/where/#considerations

选项2

使用正则表达式匹配技巧,仅在某些情况下;下面的示例仅适用于匹配,即找到字段值作为给定字符串的起始子字符串:

db.someCol.find( { a : /^(t(e(s(t( (b(l(a(b(l(a( (t(e(s(t)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?$/ } )

解释:分解“应该包含在”字符串中的组件,并与正则表达式的所有子可能性相匹配。

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

答案 1 :(得分:0)

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

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