如何解决在MongoDB数组中查询一个月
我要解决的问题是使用猫鼬的find模型函数查询一系列文档。我的文档看起来像这样:
{
name: "John",courses: [
{
name: "CS",enrolled: 2015-12-12T00:00:00.000+00:00,...,},{
name: "Math",enrolled: 2016-10-12T00:00:00.000+00:00,{
name: "History",enrolled: 2017-09-12T00:00:00.000+00:00,]
}
因此,这里的问题是我要查询所有这些文档,其中数组中的一个子文档具有一个“已注册”字段,该字段与该日期对应的特定月份匹配。例如,找到该人在12月(第12个月)参加课程的所有文档
我知道,只要“注册”是文档中的日期字段,就可以执行以下操作。
{$expr: {$eq: [{$month: "$enroll"},12]}}
问题在于日期字段位于数组内部并嵌入在子文档中。我不要,因为我需要使用猫鼬的查找模型功能来检索整个文档,所以不想使用聚合管道。
关于如何进行的任何想法?谢谢!
解决方法
由于您在查询中遇到麻烦,因此可以使用$filter
消除不需要的对象。
{
"$project": {
name: 1,courses: {
$filter: {
input: "$courses",cond: {
$eq: [
"$$this.enrolled","2016-10-12T00:00:00.000+00:00"
]
}
}
}
}
}
,
如果您需要在检索整个文档的同时还进行匹配,则可以通过聚合来实现。
查询:
db.collection.aggregate([
{
$addFields: {
coursesCopy: "$courses"
}
},{
"$unwind": "$courses"
},{
"$match": {
"$expr": {
"$eq": [
{
"$month": "$courses.enrolled"
},12
]
}
}
},{
$group: {
_id: "$_id",courses: {
$first: "$coursesCopy"
}
}
}
]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。