如何查找文档,哪个字段是特定字符串的子字符串?

时间:2019-01-20 17:52:16

标签: database mongodb nosql

有什么方法可以在MongoDB集合中查找文档,哪个字段是我的“ string” 的子字符串?

只是一个例子。假设我有这个收藏集:

{"str": "pho", ...},
{"str": "sma", ...},
{"str": "goa", ...},
{"str": "aba", ...},
{"str": "gag", ...}
...

例如,我的“字符串” 是“智能手机”。因此查询结果应为:

{"str": "pho", ...}
{"str": "sma", ...}

目前,我使用此正则表达式解决我的问题:

^[smartphone]+$

可以,但是也可以匹配{"str": "ophms", ...}这样的文档,其中“ str”不是“智能手机”的子字符串。

我知道,我的问题很像#2123738,但这是关于sql数据库的,查询方法差异很大。

1 个答案:

答案 0 :(得分:1)

您可以使用$indexOfCP查找字符串是其他字符串的子字符串,如果是,它将返回起始索引,否则返回-1

{$expr : {$gte : [{$indexOfCP: ["smartphone","$str"]},0]}}

收藏

> db.t60.find()
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2de"), "str" : "pho" }
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2df"), "str" : "sma" }
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2e0"), "str" : "goa" }
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2e1"), "str" : "aba" }

结果

> db.t60.find({$expr : {$gte : [{$indexOfCP: ["smartphone","$str"]},0]}})
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2de"), "str" : "pho" }
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2df"), "str" : "sma" }