mongoose 聚合查询 通过$match 来匹配某个时间段?
发布于 6 年前 作者 wiscgazf 2536 次浏览 来自 问答

数据集合: { "_id" : ObjectId(“5bac4d71f621081e1c15b7a6”), “notesData” : ObjectId(“5b8ca56f41c8b122444639db”), “userData” : ObjectId(“5b98729d75f1ef1708575269”), “status” : 0, “replyData” : [ { "_id" : ObjectId(“5bac4d71f621081e1c15b7a7”), “from” : null, “to” : ObjectId(“5b98729d75f1ef1708575269”), “content” : “你好,世界,评论功能已经完善![吃瓜]”, “createTime” : ISODate(“2018-09-27T03:24:33.224Z”) }, { "_id" : ObjectId(“5bac4db2f621081e1c15b7a8”), “from” : ObjectId(“5b98729d75f1ef1708575269”), “to” : ObjectId(“5b7a777d8de91e20f0c3f712”), “content” : “恭喜啊[钢铁侠][吃瓜][吃瓜]”, “createTime” : ISODate(“2018-09-27T03:25:38.477Z”) }, { "_id" : ObjectId(“5baee1744df73e214c51b748”), “from” : ObjectId(“5b7a777d8de91e20f0c3f712”), “to” : ObjectId(“5b7cc3a86e289823248fd1a2”), “content” : “评论功能出现小bug 正在努力修复当中 费劲啊[允悲]”, “createTime” : ISODate(“2018-09-29T02:20:36.591Z”) } ], "__v" : 0 }

$unwind拆分后的数据为:------------------------------------------------------------------------------------- { "_id" : ObjectId(“5bac4d71f621081e1c15b7a6”), “notesData” : ObjectId(“5b8ca56f41c8b122444639db”), “userData” : ObjectId(“5b98729d75f1ef1708575269”), “status” : 0, “replyData” : { "_id" : ObjectId(“5bac4d71f621081e1c15b7a7”), “from” : null, “to” : ObjectId(“5b98729d75f1ef1708575269”), “content” : “你好,世界,评论功能已经完善![吃瓜]”, “createTime” : ISODate(“2018-09-27T03:24:33.224Z”) }

}, { "_id" : ObjectId(“5bac4d71f621081e1c15b7a6”), “notesData” : ObjectId(“5b8ca56f41c8b122444639db”), “userData” : ObjectId(“5b98729d75f1ef1708575269”), “status” : 0, “replyData” : { "_id" : ObjectId(“5bac4d71f621081e1c15b7a7”), “from” : null, “to” : ObjectId(“5b98729d75f1ef1708575269”), “content” : “你好,世界,评论功能已经完善![吃瓜]”, “createTime” : ISODate(“2018-09-27T03:24:33.224Z”) }

}

// 通过$unwind 单独把replyData数据 拆分成[{},{}]的形式,然后在$match 匹配某个时间段的数据 但是就是匹配不到数据?一下是我写得代码

Reply.aggregate([{$unwind: ‘$replyData’}, { $project: { _id: 1, notesData: 1, replyData: 1 } }, { $match: { $and: [{‘replyData.createTime’: {$gt: req.query.dataTime[1]}}, {‘replyData.createTime’: {$lt: req.query.dataTime[0]}}] } }, {$sort: {‘replyData.createTime’: -1}}]);

4 回复

这个我以前貌似遇到过,req.query.dataTime里的时间是字符串不?如果是字符串的话,new Date(time)一下就好了

@yuezm 我不用聚合查询 用普通查询就可以 聚合难道需要转。。。 我试试 自豪地采用 CNodeJS ionic

@wiscgazf 是的,find方法就不用自己new Date(),聚合就需要,查询_id也一样的

@yuezm 嗯嗯 是的 像您说的那样就可以 谢谢您 自豪地采用 CNodeJS ionic

回到顶部