mongoose 使用 lodash 或下划线 js 查询数组对象的数组

Posted

技术标签:

【中文标题】mongoose 使用 lodash 或下划线 js 查询数组对象的数组【英文标题】:moongoose query array of objects of array using lodash or underscorejs 【发布时间】: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 已过期时,您是指给定人员的任何 个任务还是所有 个任务? 【参考方案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())。谢谢

以上是关于mongoose 使用 lodash 或下划线 js 查询数组对象的数组的主要内容,如果未能解决你的问题,请参考以下文章

lodash的读音,lodash为什么叫lodash

为啥我不能使用 Underscore 或 lodash 遍历 `performance.timing`?

使用 lodash 或 ES5 对对象进行分组

当数据未定义或为空时如何使用 Lodash

找不到模块“lodash”

使用 lodash 映射键或任何其他 javascript 方法 (NodeJs) 动态更改对象键