【问题标题】:moongoose query array of objects of array using lodash or underscorejsmongoose 使用 lodash 或下划线 js 查询数组对象的数组
【发布时间】:2015-05-13 22:50:16
【问题描述】:

这是我的数据示例:

[
    {
        "_id": "54ff1f21592a15378825aa33",
        "timeline": "54fb49274e3e0c17271205d9",
        "name": "Ade Idowu",
        "first_name": "Ade",
        "last_name": "Idowu",
        "cohort": {
            "name": "Class III",
            "color": "#308cea"
        },
        "__v": 3,
        "tasks": [
            {
                "_id": "54ff2eb0a6299969a08f8797",
                "personName": "Ade Idowu",
                "projectName": "yec",
                "startDate": "2015-03-19T23:00:00.000Z",
                "endDate": "2015-03-06T23:00:00.000Z",
            }
        ]
    },
    {
        "_id": "54ff1f21592a15378825aa33",
        "timeline": "54fb49274e3e0c17271205d9",
        "name": "Bola Idowu",
        "first_name": "Bola",
        "last_name": "Idowu",
        "cohort": {
            "name": "Class III",
            "color": "#308cea"
        },
        "__v": 3,
        "tasks": []
    }
]

我想查询person.tasks 以显示任务数组为空的人员和tasks.endDate 已过期的人员的姓名。我会很感激使用 javascript 或者可能是 lodash。

【问题讨论】:

  • 当您说tasks.endDate 已过期时,您是指给定人员的任何 个任务还是所有 个任务?

标签: angularjs mongoose underscore.js lodash


【解决方案1】:

使用 lodash _.filter(collection, predicate):

遍历集合的元素,返回一个包含所有元素的数组 元素谓词返回真值。

Predicate 检查 iteree 的任务数组是否为空或任务 endDate 是否小于当前时间。

.getTime() 返回日期对象的 ms 值,以便您可以比较两个日期。如果您想按其他粒度(例如小时、天)进行过滤,可以对此进行调整。

_.filter(dataObject, function(item){
  var now = new Date();
  return item.tasks.length == 0 || (newDate(item.tasks.endDate).getTime()  < now.getTime());
});

【讨论】:

  • 好答案!但是,通常答案如果包含对代码的用途的解释以及为什么在不介绍其他人的情况下解决问题的原因会更有帮助。
  • 已更新说明。
  • 方法是对的。谢谢。除了 dataObject 之外,tasks 也是一个对象数组,因此需要对其进行过滤,然后可以从第二次过滤中检查日期条件,即(newDate(arg.endDate).getTime() &lt; noe.getTime())。谢谢
猜你喜欢
  • 2023-03-28
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 2022-01-02
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
相关资源
最近更新 更多