Moongoose 查询 Array 的对象数组 使用 Lodash 或 UnderscoreJS



这是我的数据示例:

[
    {
        "_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。

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

遍历集合元素,返回 all 元素谓词返回真值。

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

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

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

最新更新