我正在寻找一个运算符,它允许我检查一个字段的值是否包含某个字符串.
就像是:
db.users.findOne({$contains:{"username":"son"}})
Run Code Online (Sandbox Code Playgroud)
那可能吗?
Par*_*ade 624
您可以使用以下代码执行此操作.
db.users.findOne({"username" : {$regex : ".*son.*"}});
Run Code Online (Sandbox Code Playgroud)
Jam*_*Gan 170
由于Mongo shell支持正则表达式,这是完全可能的.
db.users.findOne({"username" : /.*son.*/});
Run Code Online (Sandbox Code Playgroud)
如果我们希望查询不区分大小写,我们可以使用"i"选项,如下所示:
db.users.findOne({"username" : /.*son.*/i});
Run Code Online (Sandbox Code Playgroud)
请参阅:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions
Zhe*_*Kai 133
https://docs.mongodb.com/manual/reference/sql-comparison/
http://php.net/manual/en/mongo.sqltomongo.php
MySQL的
SELECT * FROM users WHERE username LIKE "%Son%"
Run Code Online (Sandbox Code Playgroud)
MongoDB的
db.users.find({username:/Son/})
Run Code Online (Sandbox Code Playgroud)
oko*_*oko 68
从版本2.4开始,您可以在字段上创建文本索引以搜索并使用$ text运算符进行查询.
首先,创建索引:
db.users.createIndex( { "username": "text" } )
然后,搜索:
db.users.find( { $text: { $search: "son" } } )
基准(约150K文件):
笔记:
db.collection.createIndex( { "$**": "text" } )
.Nit*_*tai 26
由于这是搜索引擎中的第一个命中之一,并且上述所有内容似乎都不适用于MongoDB 3.x,这里有一个正常运行的正则表达式搜索:
db.users.find( { 'name' : { '$regex' : yourvalue, '$options' : 'i' } } )
Run Code Online (Sandbox Code Playgroud)
无需创建和额外索引或类似.
Anu*_*sra 16
完成此任务的最简单方法
如果您希望查询区分大小写
db.getCollection("users").find({'username':/Son/})
Run Code Online (Sandbox Code Playgroud)
如果您希望查询不区分大小写
db.getCollection("users").find({'username':/Son/i})
Run Code Online (Sandbox Code Playgroud)
Pat*_*bug 15
如果您通过Python连接MongoDB,则需要执行以下操作
db.users.find({"username": {'$regex' : '.*' + 'Son' + '.*'}})
Run Code Online (Sandbox Code Playgroud)
您也可以使用变量名而不是'Son',因此也可以使用字符串连接.
小智 11
我使用这段代码,它适用于搜索子字符串
db.users.find({key: { $regex: new RegExp(value, 'i')}})
Run Code Online (Sandbox Code Playgroud)
如果您需要搜索多个属性,可以使用 $or。例如
Symbol.find(
{
$or: [
{ 'symbol': { '$regex': input, '$options': 'i' } },
{ 'name': { '$regex': input, '$options': 'i' } }
]
}
).then((data) => {
console.log(data)
}).catch((err) => {
console.log(err)
})
Run Code Online (Sandbox Code Playgroud)
在这里,您的搜索基于输入是否包含在符号属性或名称属性中。
如果正则表达式在您的聚合解决方案中不起作用并且您有嵌套对象。尝试这个聚合管道:(如果您的对象结构很简单,只需从下面的查询中删除其他条件):
db.user.aggregate({$match:
{$and:[
{"UserObject.Personal.Status":"ACTV"},
{"UserObject.Personal.Address.Home.Type":"HME"},
{"UserObject.Personal.Address.Home.Value": /.*son.*/ }
]}}
)
Run Code Online (Sandbox Code Playgroud)
另一种方法是直接查询,如下所示:
db.user.findOne({"UserObject.Personal.Address.Home.Value": /.*son.*/ });
Run Code Online (Sandbox Code Playgroud)
理想答案它的使用索引 i选项不区分大小写
db.users.findOne({"username" : new RegExp(search_value, 'i') });
Run Code Online (Sandbox Code Playgroud)
小智 7
这应该做的工作
db.users.find({ username: { $in: [ /son/i ] } });
Run Code Online (Sandbox Code Playgroud)
该i
是只是为了防止匹配的字母单例的限制。
您可以查看$regex
有关 MongoDB 文档的文档。这是一个链接:https : //docs.mongodb.com/manual/reference/operator/query/regex/
如果您的正则表达式包含变量,请确保对其进行转义。
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
Run Code Online (Sandbox Code Playgroud)
可以像这样使用
new RegExp(escapeRegExp(searchString), 'i')
Run Code Online (Sandbox Code Playgroud)
或者在像这样的 mongoDb 查询中
{ '$regex': escapeRegExp(searchString) }
Run Code Online (Sandbox Code Playgroud)
在这里发表了相同的评论
实地搜寻
('$options': 'i'
用于不区分大小写的搜索)
db.users.aggregate([
{
$match: {
'email': { '$regex': '@gmail.com', '$options': 'i' }
}
}
]);
Run Code Online (Sandbox Code Playgroud)
完整文档搜索
(仅适用于使用文本索引索引的字段
db.articles.aggregate([
{
$match: { $text: { $search: 'brave new world' } }
}
])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
358659 次 |
最近记录: |