moongoose使用lodash或underscorejs查询数组对象的数组

时间:2015-03-11 22:30:58

标签: angularjs mongoose underscore.js lodash

以下是我的数据示例:

[
    {
        "_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数组为空的那些名称以及tasks.endDate已过期的名称。我很感激使用javascript或者可能是lodash。

1 个答案:

答案 0 :(得分:1)

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

  

迭代集合的元素,返回所有的数组   元素谓词返回truthy for。

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

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

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