【问题标题】:Query mongoose subdocuments查询 mongoose 子文档
【发布时间】:2015-04-27 12:49:59
【问题描述】:

我想编写一个管理工作轮班的应用程序。因此,我为就业创建了一个架构,其中包含一个字段 shifts: [Shift],其中 Shift 是包含一个 startDate: Date 字段的架构。

现在我想查询数据库以返回具有 Shifts 条件的就业:startTimestamp <= startDate <= endTimestamp 以在日历中显示结果。

不幸的是,我无法弄清楚如何进行查询,也找不到有关 mongoose 查询的更深入的解释。如果有人可以帮助我,那就太好了。

提前致谢!

编辑:

我尝试了以下

  .find(
    {customer: req.user.customer,
    'shifts.startDate': {$gte: req.params.startDate, $lte: req.params.endDate} })

但这不起作用。我应该补充一点,每个就业都有一个客户字段,每个请求都应该只返回属于当前用户所属客户的就业

【问题讨论】:

标签: node.js mongodb mongoose


【解决方案1】:

当匹配一个范围内的数组字段元素时,使用$elemMatch 确保匹配的两个条件都由相同元素满足。

MyModel.find({
    customer: req.user.customer,
    shifts: {$elemMatch: {startDate: {$gte: req.params.startDate, 
                                      $lte: req.params.endDate}}}
})

【讨论】:

  • 非常感谢您的帮助。但是,您的解决方案存在一个小问题:不能直接使用req.params.*,因为没有从字符串到整数的内部转换。必须写parseInt(req.params.*).... 这可能对遇到相同问题的其他人有所帮助
【解决方案2】:

这就是你的做法;

db.employments.find({shifts.startDate: {$gte: startTimestamp, $lt: endTimestamp}});

【讨论】:

    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 2020-08-02
    • 2020-01-20
    • 1970-01-01
    • 2017-02-28
    • 2021-07-19
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多