node.js - 如何使用 MongoDB 按名字和姓氏搜索用户?

我有一个基本的用户集合,其中包含他们的 firstNamelastName 和一些其他详细信息。

我将如何简单地通过两个名称的组合或部分搜索来搜索用户?

例如,对于一个集合:

{
   firstName: Bob,
   lastName: Jerry
}, {
   firstName: Clark,
   lastName: Mcbobby
}

如果搜索词是 bob,则将返回两个用户,因为第一个文档 firstName 是 bob,最后一个用户 lastName 包含鲍勃。如果 bob j 是搜索词,则只返回第一个文档,因为如果两个名称都合并,它等于匹配搜索词的 Bob Jerry

我尝试创建一个基本的 aggregate 来连接名称,然后进行匹配,尽管 Mongoose 一直向我抛出错误:Arguments must be aggregate pipeline operator

这是我当前的代码:

User.aggregate({
    $project: { "name" : { $concat : [ "$firstName", " ", "$lastName" ] } },
    $match: {"name": {$regex: "/bob j/i"}}
}).exec(function(err, results) {
    ...
});

最佳答案

我发现您的代码中有几个错误导致了不希望的结果。

  1. 聚合管道接受聚合框架操作数组。在您的情况下,您缺少 [] 运算符。应该是这样的

    User.aggregate([{$project...},{$match...}])

  2. 在 $match 阶段,您使用的是正则表达式,如果您使用的是 /../ 风格的正则表达式,则不需要将其包裹在字符串引号中。应该是 /bob j/i

这是完成的例子:

User.aggregate([
  {$project: { "name" : { $concat : [ "$firstName", " ", "$lastName" ] } }},
  {$match: {"name": {$regex: /bob j/i}}}
]).exec(function(err, result){
  console.log(result);
});

您应该会在屏幕上看到 [ { _id: 574c3e20be214bd4078a9149, name: 'Bob Jerry' } ]

https://stackoverflow.com/questions/37525675/

相关文章:

mongodb - 为启用身份验证的 mongodb 运行 mongostat 时出现问题

node.js - 我的 Electron 应用程序启动时如何启动 mongodb 服务

node.js - 如何使用 mongo/mongoose 连接远程数据库

mongodb - 如何从 mongodb 集合中删除空字符串?

ruby-on-rails - 在 Rails 控制台中列出所有 Mongoid 模型

mongodb - 使用 mongoose 正则表达式与文本在 mongodb 中搜索

node.js - Mongoose 在未指定的时间段后停止响应

node.js - docker compose = ECONNREFUSED 中的 NodeJS

json - 如何使用 Pentaho 从 json 中的三个表到 mongodb 执行复杂文档

node.js - Nodejs 我需要使用 Passport