首页 > 解决方案 > 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 位数字......”(错过了问题的重点)

谢谢

标签: mongodbmongodb-query

解决方案


您可以使用正则表达式 (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/ ] } } )

结果:此查询将获得_ids 为 1、2、3、4、5 的五个文档。

以下查询将获取所有 Smiths(_ids 4 和 5):

db.regex1.find({ name: /^Smith/ })


注意事项

  1. 邮政编码(例如,“40475”和“40475-3724”)可以以类似的方式匹配,如上例所示。
  2. 还有一个$regex运算符可用于查询,但它不适用于$in.

推荐阅读