在 $unwind 之前检查子文档是否不为空

2023-12-07

我有一个Job包含 job_title、job_location、salary 等的 schema

应用架构将子文档嵌入到工作文档中,它存储该特定工作已收到的所有申请

这是作业架构的样子

const jobSchema = new Schema({
  job_title : {
    type : String,
    required : true
  },
  job_location : {
    type : String,
  },
  salary : {
    type : Number
  },
  applications: [ApplicationSchema],
  companyId : {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Company'
  }
},{timestamps : true});

var Job = mongoose.model('Job', jobSchema);

module.exports = Job;

您可以看到上面的应用程序子文档。

这是当没有特定工作申请时我的工作文档的样子

 {
"_id" : ObjectId("5ac873c3bb7a9c3168ff159e"),
    "applications" : [],
    "job_title" : "Junior Developer",
    "companyId" : ObjectId("5ac870d0bb7a9c3168ff159c"),
    "createdAt" : ISODate("2018-04-07T07:31:15.257Z"),
    "updatedAt" : ISODate("2018-04-07T09:20:52.237Z"),
    "__v" : 2,
    "job_location" : "Pune, Maharashtra, India",
    "salary" : 3
}

并与应用程序

   {
    "_id" : ObjectId("5ac873c3bb7a9c3168ff159e"),
        "applications" : [ 
            {
                "applied" : true,
                "shortlisted" : false,
                "interviewed" : false,
                "offered" : false,
                "hired" : false,
                "rejected" : false,
                "rejectedComment" : ""
            }, 
            {
                "applied" : true,
                "shortlisted" : false,
                "interviewed" : false,
                "offered" : false,
                "hired" : false,
                "rejected" : false,
                "rejectedComment" : ""
            }
        ],
        "job_title" : "Junior Developer",
        "companyId" : ObjectId("5ac870d0bb7a9c3168ff159c"),
        "createdAt" : ISODate("2018-04-07T07:31:15.257Z"),
        "updatedAt" : ISODate("2018-04-07T09:20:52.237Z"),
        "__v" : 2,
        "job_location" : "Pune, Maharashtra, India",
        "salary" : 3
    }

这是查询

var jobsQuery = [
      {
        $match: {
          companyId: mongoose.Types.ObjectId(req.body.companyId),
          active: req.body.active
        }
      },
      {
        $unwind: "$applications"
      },
      {
        $match : query
      },
      {
        "$group":
                {
                  "_id": "$job_title",
                  "job_title": {$first: "$_id"},
                  "job_location": {$first: "$job_location"},
                  "min_experience": {$first: "$min_experience"},
                  "max_experience": {$first: "$max_experience"},
                  "min_salary": {$first: "$min_salary"},
                  "max_salary": {$first: "$max_salary"},
                  "createdAt": {$first: "$createdAt"},
                  "userId": {$first: "$userId"},

                  "applied": {"$sum":
                                   {"$cond":
                                           [{"$and": [
                                             {"$eq":["$applications.applied", true]},
                                             {"$eq":["$applications.shortlisted", false]},
                                             {"$eq":["$applications.interviewed", false]},
                                             {"$eq":["$applications.offered", false]},
                                             {"$eq":["$applications.hired", false]},
                                             {"$eq":["$applications.rejected", false]},
                                           ]},
                                           1,0]
                                   }
                             },

                }
      },
      {
          "$lookup":
              {
                  from: "users",
                  localField: "userId",
                  foreignField: "_id",
                  as: "userDetail"
              }
      },
    ]

当一份工作收到申请时,它工作得很好,但当没有收到申请时,它就无法放松,这就是我什么也得不到的地方

那么我怎样才能给出一些条件,以便这个查询在有或没有任何应用程序的情况下都可以工作

我也在查询申请阶段的申请人数,我也有其他阶段。


你需要添加preserveNullAndEmptyArrays你里面的财产$unwind像这样的操作:

{
 $unwind:
  {
    path: "$applications",
    preserveNullAndEmptyArrays: true
  }
}

如果为 true,并且路径为 null、缺失或为空数组,则 $unwind 输出文档。如果为 false,则当路径为空、缺失或空数组时,$unwind 不会输出文档。

$unwind

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 $unwind 之前检查子文档是否不为空 的相关文章

  • 如何将后端计时器与移动应用程序同步

    我正在开发一个选择用户并有 15 秒时间的应用程序 该用户响应的计时器 用户应用程序每 5 秒查询一次数据库 以查看是否选择了该用户 如果是这样 移动应用程序将开始 15 秒 定时器 问题是计时器永远不会匹配 因为用户应用程序可以位于与后端
  • 将 Mongo 集合转储为 JSON 格式

    有没有办法将 mongo 集合转储为 json 格式 无论是在 shell 上还是使用 java 驱动程序 我正在寻找性能最好的一个 Mongo 包含一个 mongoexport 实用程序 参见文档 https docs mongodb c
  • 返回游标数组不显示任何结果

    我试图通过这样做来解决两个集合的 连接 foundUsers function var searchUser Session get searchUser user search criteria var usf User find sea
  • 是否可以将环境变量添加到 MongoDB 配置文件中?

    我正在使用 YAML 语法配置 MongoDB 副本集 但是 我想使用 MONGODB HOME 环境变量指向数据库 storage dbPath ENV MONGODB HOME data db 我尝试过使用 等 但没有成功 可以这样做吗
  • 如何在猫鼬中获得多个结果并将其合并为一个响应

    在 API 路由 调用中 我希望有 3 个 mongoose 查询 然后组合结果以形成响应 json Query student countDocuments then stundentNumber gt return stundentNu
  • 更新 MongoDB 中精确元素数组中的字段

    我有一个结构如下的文档 id 43434 heroes nickname test items nickname test2 items Can I set的第二个元素items数组中嵌入对象的数组heros with nickname t
  • MongoDB list集合过滤器

    我正在使用 Node js 我正在尝试过滤必须排除集合 出口 的集合并检索所有其他集合 但我似乎无法弄清楚语法 我试过了 db listCollections filter outlets toArray err docs 有什么建议么 您
  • 如何使用打字稿在猫鼬模型中定义自定义查询助手?

    我想使用定义自定义查询助手查询助手 API https mongoosejs com docs guide html query helpers 这里是例子 models article ts import Document Schema
  • 使用 mongodb/mongoid 排序时,有没有办法将所有 nil 值放在最后?

    除了问题中已有的内容之外 确实没什么可说的 使用 monoid People asc age 我首先得到零值 有没有办法总是返回nillast 或者告诉 mongodb 将 nil 视为非常高 与回答的完全一样sql中同样的问题在这里 ht
  • 删除时忽略限制(猫鼬)

    我需要删除集合中最早的几个文档 所以我写了这样的内容 Model remove u abc sort id 1 limit 10 exec function err count count gives the total documents
  • 如何在 python 2.7 中创建负日期时间

    我需要在 mongodb 中插入一些 BC 日期 但我无法创建具有负值的日期时间 例如datetime datetime 2000 2 1 但是在 mongodb 中可以使用 IsoDate 那么我如何在 python 中创建负日期呢 我目
  • 如何在 mongodb 中对数组进行 AND 查询?

    我有一个带有标签的数组 它是文档的一部分 例如 红 绿 蓝 白 黑 现在我想找到所有有红色和蓝色的文档 使用 all 条件查找同时匹配 红色 和 蓝色 条件的记录 db my collection find tags all red blu
  • 将 mongoid 会话设置为只读

    我有不同的会话mongoid yml 其中一个会话提供来自静态 mongo 数据库的数据 我想知道是否有可能以只读模式 加载 会话 以便不进行任何更改save create destroy or destroy all可以制作 我的mong
  • 如何在聚合框架中按位置修改数组中的值

    假设有一个简单的文档 array a b c d 如何修改second值在聚合 With update这很简单 db collection updateOne set array 1 B gives array a B c d 在聚合框架中
  • 使用 MongoDB PHP 驱动程序时的安全问题

    我有在 MYSQL 上保护 sql 注入的经验 但是在使用 php 驱动程序的 MongoDB 上我应该注意什么 在大多数页面中 我通过 GET POST 和搜索 插入系统获取数据 我通过 UDID 其他字段进行搜索 并且可以插入任何字符串
  • node-mongodb-native MongoClient 意外关闭连接

    我一直在 mongodb 中搜索大量意外关闭的连接 但只能找到希望关闭连接的人提出的问题 我正在使用 node mongodb native 连接到数据库 但我不断收到看似随机的 错误 连接已关闭 消息 如果我手动重试请求 浏览器刷新 则请
  • mongoose 查询:通过 id 在数组中查找对象

    我怎样才能在此 Schema 中通过 id 找到图像 我有用户的 id 和我正在寻找的图像的 id 执行此操作的最佳方法是什么 在这种情况下 所有图像是否具有不同的 id 或者它们是否可以具有相同的 id 因为它们不属于同一用户 我的架构如
  • 如何在Spring Boot中初始化一次MongoClient并使用它的方法?

    您好 我正在尝试导出MongoClient在 Spring Boot 中成功连接后 我尝试在其他文件中使用它 这样我就不必每次需要在 MongoDB 数据库中进行更改时都调用该连接 连接非常简单 但目标是将应用程序连接到我的数据库一次 然后
  • MongoDB 的简单 HTTP/TCP 健康检查

    我需要为 Docker 容器内的 MongoDB 实例创建运行状况检查 尽管我可以采取解决方法并通过 CLI 使用 Mongo Ping 但最好的选择是创建一个简单的 HTTP 或 TCP 测试 标准 ping 测试中默认 27017 端口
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro

随机推荐

  • 带圆角的矩形旋转器

    我正在尝试制作加载程序 它看起来像这样 CodePen 但我需要有圆形边框和矩形 而不是盒子 这样我就可以将我们公司的标志放置到装载机上 我尝试再制作一层 这将制作内联半径和包装器 我设置border radius and overflow
  • 将 Datagridview 值更新到数据库中

    我正在开发一个表单应用程序 用户可以从数据库获取表数据 进入可编辑的 gridviewcontrol 以便用户可以更新网格中的一些数据 当用户单击表单上的更新按钮时 更新的数据网格值应该在数据库中更新 用户可以一次更新更多列值 我第一次在数
  • MySQL 错误 1060:重复的列名 ALTER TABLE

    由于我没有创建的代码中的错误 我在查询时遇到了一些问题 query this gt db gt query ALTER TABLE DB PREFIX customer ADD customer type TINYINT 1 NOT NUL
  • Django时区感知DateTimeField默认值时区感知错误

    我正在尝试将 DateTimeField 添加到我的 django 模型中 并以最大时间戳作为默认值 我已经弄清楚 Django 中的最大时间戳是 9999 12 31 23 59 59 与我的 postgres 数据库中使用的最大时间戳不
  • 内存通常比磁盘快多少?

    IDE SCSI SSD SATA 或所有这些 我很惊讶 本文中间的图3 大数据的病理学 表示进行顺序访问时内存仅快 6 倍左右 内存为 350 Mvalues sec 而磁盘为 58 Mvalues sec 但当您进行随机访问时 速度大约
  • std::enable_if 如何工作?

    我刚刚问了这个问题 std numeric limits 作为条件 我明白用法在哪里std enable if将有条件地定义方法的返回类型 导致该方法无法编译 template
  • 按 Column.DisplayMember 对 DataGridView 进行排序

    我有一个DataGridView有几个DataGridViewComboBoxColumn实际值与 ID 相关联 但DisplayMember是查找表中的字符串对应项 我试图做到这一点 以便当我按该列排序时 排序是根据DisplayMemb
  • 适用于 SUN Solaris 和 linux 的 awk + ​​fit 语法

    需要以下方面的帮助 当我在 Linux 上运行以下命令时 它运行良好 awk v NAME MACHINE 1 NAME etc hosts 但在 SUN Solaris 上我得到以下信息 awk v NAME MACHINE 1 NAME
  • 使用 Spring 依赖注入的自定义转换器

    有没有一种方法可以在 Dozer 中定义自定义转换器 用于将一种顶级类型转换为另一种顶级类型 而另一种类型本身就是一个 Spring bean 因此可以注入其依赖项 dozer 文档建议添加以下 XML 定义
  • 如何在 ios 图表中添加标记到中心位置,同时水平滚动并增加scaleX并启用拖动

    我正在使用 Daniel Cohen Gindi 的图表框架 我通过增加scaleX值并启用拖动来水平滚动图表 如这个问题的答案中所述 快速设置我的条形图的水平滚动 我想当用户水平滚动时在中心位置添加标记 我知道每当用户拖动图表时都会调用
  • 如何更改 Zend Framework 的包含目录

    我收到以下错误消息 Warning include once Zend Db php function include once failed to open stream No such file or directory in C Ea
  • 如何将日期变量转换为java.sql.date

    我在尝试将日期变量插入数据库表时遇到困难 我的变量叫做 Date date4 date4 变量值是从具有日历选择器的文本框中读取的 为了插入日期列 我将字段类型设置为日期 preparedstmt setDate 4 date4 然而 提交
  • 检查数组是否包含其他数组的所有元素?

    我有2个数组 第二个数组必须包含第一个数组中的所有元素 如何检查 谢谢 For example array 1 Array 0 gt Email 1 gt 1 Name array 2 Array 0 gt 1 Name 1 gt In t
  • 在 msvc++ 2010 Express 中似乎找不到 std::thread

    我最近一直在阅读有关 c 的各种新添加内容 我对此感到非常兴奋 并且我已经了解了新的 std unique ptr 和 std shared ptr 对象 它们非常有用 现在我正在寻找对于我听说过的本机线程库 但似乎无法在任何地方找到它 我
  • 无法在本地有效地使用 Git

    请参见格雷格的回答 我不明白丹尼尔的声明线程完全地 为什么要手动复制文件 周围有什么吗 当然你应该只是 将它们添加到存储库中 然后查看 并根据需要进行承诺 我没看到 需要移动文件 这似乎违背了整个目的 本地结账 我目前正在使用 rsync
  • 如何在单击按钮时检查 gridview 列中复选框的状态

    我在gridview中使用了复选框列 单击链接按钮时 应检查 gridview 中的复选框是否已选中 如果没有选中任何复选框 则应显示警报 至少选中一个复选框 您必须向页面添加一些自定义 Javascript 以便显示客户端警报 下面是我编
  • jQuery 的“双击”事件(移动设备为 dblclick)

    我有以下 jquery 事件处理函数 target on dblclick function respond to double click event 我的问题是这个事件处理程序不适用于触摸设备 iPhone iPad 谁能推荐一个可靠的
  • bwmorph 的 Python 等效项

    我仍在用 Python 编写指纹图像预处理器 我在 MATLAB 中看到有一个特殊的函数可以消除 H 中断和杂散 bwmorph a hbreak bwmorph a spur 我搜索了 scikit OpenCV 等 但找不到这两种用法的
  • Node.js 服务的压力测试[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在使用node js
  • 在 $unwind 之前检查子文档是否不为空

    我有一个Job包含 job title job location salary 等的 schema 应用架构将子文档嵌入到工作文档中 它存储该特定工作已收到的所有申请 这是作业架构的样子 const jobSchema new Schema