具有 Match 的项目在 mongodb 中不起作用

编程入门 行业动态 更新时间:2024-10-26 21:28:49
本文介绍了具有 Match 的项目在 mongodb 中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试根据某些匹配条件获取数据.首先我试过这个:这里ending_date是完整的日期格式

I am trying to fetch data based on some match condition. First I've tried this: Here ending_date is full date format

Offer.aggregate([ { $match: { carer_id : req.params.carer_id, status : 3 } }, { $group : { _id : { year: { $year : "$ending_date" }, month: { $month : "$ending_date" }}, count : { $sum : 1 } } }], function (err, res) { if (err) ; // TODO handle error console.log(res); });

这给了我以下输出:

[ { _id: { year: 2015, month: 11 }, count: 2 } ]

现在我也想检查年份,所以我正在尝试:

Now I want to check year also, so I am trying this:

Offer.aggregate([ { $project: { myyear: {$year: "$ending_date"} } }, { $match: { carer_id : req.params.carer_id, status : 3, $myyear : "2015" } }, { $group : { _id : { year: { $year : "$ending_date" }, month: { $month : "$ending_date" }}, count : { $sum : 1 } } }], function (err, res) { if (err) ; // TODO handle error console.log(res); });

这给了我以下输出:

[]

如您所见,_id 的年份为 2015,所以当我匹配年份时,它应该以数组形式出现.但我得到空数组.为什么会这样?

as you can see, _id has 2015 as a year, so when I match year it should be come in array. But I am getting null array. Why this?

有没有其他方法可以只匹配整个日期时间的年份?

Is there any other way to match only year form whole datetime?

这是样本数据

{ "_id": { "$oid": "56348e7938b1ab3c382d3363" }, "carer_id": "55e6f647f081105c299bb45d", "user_id": "55f000a2878075c416ff9879", "starting_date": { "$date": "2015-10-15T05:41:00.000Z" }, "ending_date": { "$date": "2015-11-19T10:03:00.000Z" }, "amount": "850", "total_days": "25", "status": 3, "is_confirm": false, "__v": 0 } { "_id": { "$oid": "563b5747d6e0a50300a1059a" }, "carer_id": "55e6f647f081105c299bb45d", "user_id": "55f000a2878075c416ff9879", "starting_date": { "$date": "2015-11-06T04:40:00.000Z" }, "ending_date": { "$date": "2015-11-16T04:40:00.000Z" }, "amount": "25", "total_days": "10", "status": 3, "is_confirm": false, "__v": 0 }

推荐答案

您忘记投影您稍后在 $match 和 $group 中使用的字段.如需快速修复,请改用此查询:

You forgot to project the fields that you're using in $match and $group later on. For a quick fix, use this query instead:

Offer.aggregate([ { $project: { myyear: { $year: "$ending_date" }, carer_id: 1, status: 1, ending_date: 1 } }, { $match: { carer_id: req.params.carer_id, myyear: 2015, status: 3 } }, { $group: { _id: { year: { $year: "$ending_date" }, month: { $month: "$ending_date" } }, count: { $sum: 1 } } }], function (err, res) { if (err) {} // TODO handle error console.log(res); });

也就是说,布莱克七人在她的回答中解释了如何进行更好的查询.我认为您应该尝试改用她的方法.

That said, Blakes Seven explained how to make a better query in her answer. I think you should try and use her approach instead.

更多推荐

具有 Match 的项目在 mongodb 中不起作用

本文发布于:2023-11-22 19:06:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1618641.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中不   项目   Match   mongodb

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!