能否查询包含特定字段的文档?
例如,如果我有以下文档:
{a: 'test blabla'},
{a: 'test not'}
我想查找所有字段
a
完全包含在字符串"test blabla test"
中的文档,因此只有第一个文档会被返回。我知道可以使用
aggregation
和$indexOfCP
来实现,也可以使用$where
和mapReduce
来实现。我想知道是否可以使用标准的MongoDB操作符(例如$gt、$in)在find
查询中实现。谢谢。
能否查询包含特定字段的文档?
例如,如果我有以下文档:
{a: 'test blabla'},
{a: 'test not'}
a
完全包含在字符串"test blabla test"
中的文档,因此只有第一个文档会被返回。aggregation
和$indexOfCP
来实现,也可以使用$where
和mapReduce
来实现。我想知道是否可以使用标准的MongoDB操作符(例如$gt、$in)在find
查询中实现。使用$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)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?$/ } )
解释: 将“应该包含在”字符串的组件拆分并使用正则表达式匹配所有子可能性。$where
和一些其他可能性来实现。我想知道是否可以使用标准的MongoDB运算符来实现。 - TomG$indexOfCP
可用于获取索引,在这里它将是:{
"$expr": {
{$ne : [{$indexOfCP: ["test blabla test", "$a"]}, -1]}
}
}
$expr
允许聚合管道中的过滤器。db.company.findOne({"companyname" : {$regex : ".*hello.*"}});
{a: 'test'}
也完全包含在"test blabla test"
中。您是否正在寻找最接近的匹配? - s7vr