mongoose如何返回特定时间段数据

假定数据结构如下:

{
    userid:1111,
    data1:[
        {title:'test',content:'test',createTime:'2019-03-25T09:24:00.000Z'}
        {title:'test',content:'test',createTime:'2019-03-25T09:24:00.000Z'}
    ]
},
{
    userid:2222,
    data1:[
        {title:'test',content:'test',createTime:'2019-03-25T09:24:00.000Z'}
        {title:'test',content:'test',createTime:'2019-03-25T09:24:00.000Z'}
    ]
}

userid字段为用户唯一标识,我现在想要拿到某个用户data1里特定时间段的数据,应该怎么做?### 问题描述

问题出现的环境背景及自己尝试过哪些方法

我执行以下代码段返回了所有时间段的数据,并不能达到要求

const start = new Date(2019,3,1)
const end = new Date(2019,3,31)
schema.find({userId:req.body.userId,"data1.createTime":{$gte: start,$lt: end}})

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 4.6k
3 个回答
✓ 已被采纳新手上路,请多包涵

已解决,使用 obj.aggregate({...},callback) 可以只把符合条件的数据整理出来

转换成时间戳再查找

const start =  +new Date(2019,3,1)
const end =  +new Date(2019,3,31)
schema.find({userId:req.body.userId,"data1.createTime":{$gte: start,$lt: end}})

条件选择$and配合gtelte

const list = await ArticleModel
        .find(
        {
        '$and': [
            { "createdAt": { "$lte": end_time }},
            { "createdAt": { "$gte": start_time }}
            ]
        }
    )
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题