mongodb - MongoDB $in 和“like” - 获取具有邮政编码的记录 LIKE 数组中的内容
问题描述
我有一组地址和邮政编码。我想通过使用一组邮政编码来获取所有记录
所以这个查询工作正常
db.getCollection('addresses').find({"address.postal_code":{$in:['40475','37214']}})
如果我所有的邮政编码都是 5 位数字,那就太好了……但有些人输入加 4 - 所以我可能有一个地址为“37214-3724”,但不会被退回……
一个不同的用例可能是“last_name”
db.getCollection('names').find({"last_name":{$in:['Smith','Johnson']}})
当我想确保我得到 Smith、Smiths、Smithson、Smithback、Smithy 等的所有推导时。或 Johnson、Johnsonville、Johsonstonson 等
邮政编码是手头的用例,我只是通过姓氏,所以有人不会说“将您的输入限制为 5 位数字......”(错过了问题的重点)
谢谢
解决方案
您可以使用正则表达式 (regex),如下例所示。
样本文件:
{ "_id" : 1, "name" : "Johnson" }
{ "_id" : 2, "name" : "John" }
{ "_id" : 3, "name" : "Johnston" }
{ "_id" : 4, "name" : "Smith" }
{ "_id" : 5, "name" : "Smithy" }
{ "_id" : 9, "name" : "James" }
使用正则表达式查询集合:
db.regex1.find({ name: { $in: [ /^Smith/, /^John/ ] } } )
结果:此查询将获得_id
s 为 1、2、3、4、5 的五个文档。
以下查询将获取所有 Smiths(_id
s 4 和 5):
db.regex1.find({ name: /^Smith/ })
注意事项:
- 邮政编码(例如,“40475”和“40475-3724”)可以以类似的方式匹配,如上例所示。
- 还有一个$regex运算符可用于查询,但它不适用于
$in
.
推荐阅读
- mysql - 使用 SQL 查询和 Nagios 检查 Wordpress 上的评论
- android - 如何更改自定义软键盘的主题?
- python - 如果字符串中的关键字以非字母数字单词开始/结束或两者都匹配
- python-3.x - 使用python将apk文件转换为二进制文件
- scip - SCIP_NodeType 中值的含义
- flutter - 如何将我的 Hero-Widget-Page 插入到 BottomNavigationBar?
- javascript - 测试功能参数类型
- regex - 无法让我的 .htaccess 正则表达式按预期工作
- mysql - “无法从 UI 向我的数据库表中插入值”
- scala - 如何在 CircleCI 上添加 SBT 插件解析器?