如何在mongodb中搜索名字和姓氏
Posted
技术标签:
【中文标题】如何在mongodb中搜索名字和姓氏【英文标题】:How to search firstname and lastname in mongodb 【发布时间】:2013-05-23 09:32:05 【问题描述】:我读了这篇文章,看到了如何在 mongodb 中搜索记录的名字:
http://docs.mongodb.org/manual/reference/sql-comparison/
db.users.find( firstname: /^bc/ );
但是鉴于我的字符串有两个单词(即名字和姓氏),我如何搜索名字和姓氏。
在 mysql 中,我使用的是:
SELECT * FROM profiles WHERE match(firstname, lastname) AGAINST ('".$data."');
其中数据包含“mike thompson”。
【问题讨论】:
就像 MySQL 一样,你需要选择一个通用的分隔符来分隔名字和姓氏。 MySQL 使用 ` `(空白空间)并且将在输入的AGAINST
数据上执行与 php 中的 list()
相同的操作。因此,要在 MongoDB 中执行此操作:list($first,$last)=explode(' ',$data); $mongo->users->find(array('firstname'=>new MongoRegex($first),'lastname'=>new MongoRegex($last)))
【参考方案1】:
db.users.find(
first_name: /^first/,
last_name: /^last/
)
这意味着匹配 first_name 等于 first 且 last_name 等于 last 的文档。
【讨论】:
【参考方案2】:这是我的标准用法。
它使用 $or 运算符。
var query = req.query.query,
queryArr = query.split(' '),
first_name,
last_name;
// Check if it is split into a first and last name
if (queryArr.length === 2)
//create regex for first and last name
first_name = new RegExp(queryArr[0], 'i');
last_name = new RegExp(queryArr[1], 'i');
query = new RegExp(query, 'i');
var dbQuery =
// Searches first_name or last_name
$or: [
// Searches first name based on whole query or first_name query
$or: [
first_name: query
,
first_name: first_name
]
,
// Searches last_name based on whole query or last_name query
$or: [
last_name: query
,
last_name: last_name
]
]
;
db.users.find(dbQuery, function (error, response)
res.send(200,
success: true,
body: response
);
);
【讨论】:
以上是关于如何在mongodb中搜索名字和姓氏的主要内容,如果未能解决你的问题,请参考以下文章