检查一个字段是否包含一个string

我正在寻找一个操作符,它允许我检查,如果一个字段的值包含某个string。

就像是:

db.users.findOne({$contains:{"username":"son"}}) 

那可能吗?

你可以用下面的代码来完成。

 db.users.findOne({"username" : {$regex : ".*son.*"}}); 

由于Mongo shell支持正则expression式,这是完全可能的。

 db.users.findOne({"username" : /.*son.*/}); 

如果我们希望查询不区分大小写,我们可以使用“i”选项,如下所示:

 db.users.findOne({"username" : /.*son.*/i}); 

请参阅: http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions

http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

http://php.net/manual/en/mongo.sqltomongo.php

MySQL的

 SELECT * FROM users WHERE username LIKE "%Son%" 

MongoDB的

 db.users.find({username:/Son/}) 

从版本2.4开始,您可以在字段上创build文本索引来search并使用$ text运算符进行查询。

首先,创build索引:

db.users.createIndex( { "username": "text" } )

然后,search:

db.users.find( { $text: { $search: "son" } } )

基准(〜150K文件):

  • 正则expression式(其他答案)=> 5.6-6.9秒
  • 文本search=> .164-.201秒

笔记:

  • 一个集合只能有一个文本索引。 如果要search任何string字段,可以使用通配符文本索引,如下所示: db.collection.createIndex( { "$**": "text" } )
  • 文本索引可能很大。 它包含每个插入的每个文档的每个索引字段中每个唯一后置词的一个索引条目。
  • 文本索引比正常索引需要更长的时间来构build。
  • 文本索引不存储关于文档中单词邻近度的短语或信息。 因此,当整个集合放入RAM中时,短语查询将运行得更加有效。

如果你通过Python连接MongoDB,那么你需要做的是什么

 db.users.find({"username": {'$regex' : '.*' + 'Son' + '.*'}}) 

你也可以使用一个variables名而不是“Son”,因此使用string连接。

由于这是search引擎中的第一个search引擎之一,并且以上都不适用于MongoDB 3.x,所以下面是一个正则expression式search:

 db.users.find( { 'name' : { '$regex' : yourvalue, '$options' : 'i' } } ) 

无需创build和额外的索引或类似。

最简单的方法来完成这项任务

如果您希望查询区分大小写

 db.getCollection("users").find({'username':/Son/}) 

如果您希望查询不区分大小写

 db.getCollection("users").find({'username':/Son/i})