gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:48:28 25 4
gpt4 key购买 nike

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

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

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

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

我知道我可以使用 $indexOfCP 通过 aggregation 来做到这一点,也可以使用 $wheremapReduce。我在想是否可以使用标准 MongoDB 运算符(例如 $gt、$in)在 find 查询中执行此操作。

谢谢。

最佳答案

我可以想到两种方法:

选项 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)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?)?$/ } )

解释:分解“should-be-contained-within”字符串的组成部分,并使用正则表达式匹配该字符串的所有子可能性。

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

关于MongoDB - 查找字段值是否包含在给定字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43234797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com