我有一套Collection ,

[
  {
    firstName: "John",
    middleName: "F",
    lastName: "Kennedy"
  }, 
  {
    firstName: "Barack",
    lastName: "Obama"
  }
]

我正在try 创建一个按名称搜索集合的函数.我需要先把名字连在一起,然后才能找到匹配的.我try 了以下几种方法

User.aggregate([
  {
    "$project": {
      fullName: {
        "$concat": [
          "$firstName",
          " ",
          "$lastName"
        ]
      }
    }
  },
  {
    $match: {
      "fullName": {
        $regex: /[a-z\\s]*oba[a-z\\s]*/i
      }
    }
  }
])

它适用于没有中间名的名字.但我也需要这个对中间名的名字起作用.当我try 连接middleName时,我得到一个错误,因为路径middleName并不是在所有文档上都存在.我无法实现$cond$exists运算符的正确工作.任何形式的帮助都是非常感谢的.谢谢!

推荐答案

一种 Select 是使用$ifNull:

db.collection.aggregate([
  {$project: {
      fullName: {$concat: [
          "$firstName",
          " ",
          {$ifNull: [
              {$concat: ["$middleName", " "]},
              ""
          ]},
          "$lastName"
      ]}
  }}
])

看看它在playground example号公路上是如何工作的

Node.js相关问答推荐

当FastifyJS向客户端发送响应时,apache 不会将其发送给他

我的Node.js应用程序没有将Mongoose方法findByIdAndDelete作为函数进行检测

动态设置元数据,无需重复请求 NextJS 13

如何修复我的 NodeJS SSE 写入函数以在后续调用中更新 HTML?

如何避免在 mongodb 聚合中查找重复结果?

简单的 Node js 程序但执行顺序似乎不同?

用户与mongoose 的完美搭配

突然 React 无法执行create-react-app命令.为什么会发生这种情况,我该如何解决?

如何在 mongoDB 中用值 0 填充缺失的文档?

如何使用 mocha.js 模拟用于单元测试的依赖类?

如何在客户端使用 node.js 模块系统

无法获取 CSS 文件

在 express 中添加故意延迟

Node.js 中空函数的简写

Node应用程序中相同npm包的两个版本

使用 node 的内置调试器判断变量?

将 Heroku App 连接到 Atlas MongoDB 云服务

`return function *(){...}` 是什么意思?

deno vs ts-node:有什么区别

用于轻松部署和更新的 Node.js 设置