Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 查询给定月/年(非ISO日期)的记录集_Mongodb_Date_Aggregation Framework - Fatal编程技术网

Mongodb 查询给定月/年(非ISO日期)的记录集

Mongodb 查询给定月/年(非ISO日期)的记录集,mongodb,date,aggregation-framework,Mongodb,Date,Aggregation Framework,我试图将唯一的日期n(比如说2000多条记录)传递给前端,给用户一个mm/yyyy列表,以便按月选择记录 然后我需要它将他们选择的月份作为ID(当前格式为mm yyyy)传递到后端,然后只查询该月份/年份中的那组记录 我能够获得所有记录的所有不同月份/年份。但是现在我需要传递月/年作为参数 我的问题是:如何查询与给定月份/年份匹配的所有记录 我之前发布了一些东西,user3100115建议使用 文档说要在一年内通过,{$match:{year:2014}},,我假设你也可以在一个月内通过。但当时

我试图将唯一的日期n(比如说2000多条记录)传递给前端,给用户一个
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