是否可以查询给定字符串中包含特定字段的文档?
例如,如果我有这些文件:
{a: 'test blabla'},
{a: 'test not'}
我想找到字段a
完全包含在字段"test blabla test"
中的所有文档,因此只会返回第一个文档。
我知道我可以使用aggregation
$indexOfCP
使用$where
,mapReduce
和find
。如果可以使用标准的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;
查询中进行搜索,我就会徘徊。
感谢。
答案 0 :(得分: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
使用正则表达式匹配技巧,仅在某些情况下;下面的示例仅适用于匹配,即找到字段值作为给定字符串的起始子字符串:
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.*"}});