Mongodb 查询给定月/年(非ISO日期)的记录集
我试图将唯一的日期n(比如说2000多条记录)传递给前端,给用户一个Mongodb 查询给定月/年(非ISO日期)的记录集,mongodb,date,aggregation-framework,Mongodb,Date,Aggregation Framework,我试图将唯一的日期n(比如说2000多条记录)传递给前端,给用户一个mm/yyyy列表,以便按月选择记录 然后我需要它将他们选择的月份作为ID(当前格式为mm yyyy)传递到后端,然后只查询该月份/年份中的那组记录 我能够获得所有记录的所有不同月份/年份。但是现在我需要传递月/年作为参数 我的问题是:如何查询与给定月份/年份匹配的所有记录 我之前发布了一些东西,user3100115建议使用 文档说要在一年内通过,{$match:{year:2014}},,我假设你也可以在一个月内通过。但当时
mm/yyyy
列表,以便按月选择记录
然后我需要它将他们选择的月份作为ID(当前格式为mm yyyy
)传递到后端,然后只查询该月份/年份中的那组记录
我能够获得所有记录的所有不同月份/年份。但是现在我需要传递月/年
作为参数
我的问题是:如何查询与给定月份/年份匹配的所有记录
我之前发布了一些东西,user3100115建议使用
文档说要在一年内通过,{$match:{year:2014}},
,我假设你也可以在一个月内通过。但当时我并不真正理解其中的“修订”部分
因此,我尝试使用$match和year获取所有记录:
db.mycollection.aggregate({$match:{year:2015})
没有返回任何内容,因为我的文档中没有简单的年份
字段。。。而是ISO格式的日期
我试过了
var query = Order.aggregate(
{
$project:
{
year :
{
$year: '$date'
},
month:
{
$month: '$date'
}
}
},
{
$match:
{
year : year,
month: month
}
}
);
但这不会返回文档对象,只返回_id、月、年:
{ _id: 'someid',
year: 2015,
month: 3 },
{ _id: 'someid',
year: 2015,
month: 3 },
首先,您需要使用从ISODate字段中取出年份和月份。然后,您可以对预测值进行分析。下面的内容可能会给你一个想法 $created_at是MongoDB中的ISODate字段
db.test.aggregate(
{ "$project": {
"year":{"$year":"$created_at"},
"month":{"$month":"$created_at"},
},
{ "$match":{
"year" :2015,
"month": 3
}
})
如果需要在返回的结果中添加更多字段,可以将这些字段添加到项目中,或者尝试使用mongodb子句
注意:使用$where可能会非常慢。首先,您需要使用从ISODate字段中取出年份和月份。然后,您可以对预测值进行分析。下面的内容可能会给你一个想法 $created_at是MongoDB中的ISODate字段
db.test.aggregate(
{ "$project": {
"year":{"$year":"$created_at"},
"month":{"$month":"$created_at"},
},
{ "$match":{
"year" :2015,
"month": 3
}
})
如果需要在返回的结果中添加更多字段,可以将这些字段添加到项目中,或者尝试使用mongodb子句
注意:使用$where可能会非常慢。正如我提到的,最好的方法是使用操作符
db.mycollection.aggregate([
{“$redact”:{
“$cond”:[
{“$and”:[
{“$eq”:[{“$year”:“$date”},2015]},
{“$eq”:[{“$month”:“$date”},3]}
] },
“$$KEEP”,
“$$PRUNE”
] }
}
])
正如我提到的,最好的方法是使用操作符
db.mycollection.aggregate([
{“$redact”:{
“$cond”:[
{“$and”:[
{“$eq”:[{“$year”:“$date”},2015]},
{“$eq”:[{“$month”:“$date”},3]}
] },
“$$KEEP”,
“$$PRUNE”
] }
}
])
Awesome,但是如何从中获取实际的文档对象呢。它只返回一个_id、月、年的对象。只是添加了一些更多信息。看看这是否有帮助。事实证明,要获得完整的文档对象,您可以执行文档:“$$ROOT”
是的,我们也可以这样做。你能编辑答案并添加它吗?实际上我更喜欢指定字段:D谢谢!太棒了,但是我如何才能从中获得实际的文档对象呢。它只返回一个_id、月、年的对象。只是添加了一些更多信息。看看这是否有帮助。事实证明,要获得完整的文档对象,您可以执行文档:“$$ROOT”
是的,我们也可以这样做。你能编辑答案并添加它吗?实际上我更喜欢指定字段:D谢谢!为什么这比上面的选项好呢?因为你只有在舞台上,这使它更快。$redact
操作员正在幕后执行$project
和$match
。也不要使用$where
为什么这比上面的选项好?因为你只有在舞台上,这使它更快。$redact
操作员正在幕后执行$project
和$match
。也不要使用$where