Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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匹配$,不匹配';除了美元或美元,我不工作_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB匹配$,不匹配';除了美元或美元,我不工作

MongoDB匹配$,不匹配';除了美元或美元,我不工作,mongodb,mongodb-query,Mongodb,Mongodb Query,我试图在管道中匹配给定日期范围内的所有文档 使用$或时,我成功地获取了确认$或条件的数据。但是,将其切换到$和时,我没有返回任何数据 匹配块: { "fields.issueType.name" : "Bug", "fields.resolutionDate" : { "$exists" : false }, $expr: { $and: [

我试图在管道中匹配给定日期范围内的所有文档

使用
$或
时,我成功地获取了确认
$或
条件的数据。但是,将其切换到
$和
时,我没有返回任何数据

匹配块:

{
    "fields.issueType.name" : "Bug",
        "fields.resolutionDate" : {
        "$exists" : false
    },
    $expr: {
        $and: [
            { $gte: ["fields.created", new Date("2020-01-01T00:00:00.0Z")] },
            { $lte: ["fields.created", new Date("2021-01-01T00:00:00.0Z")] }
        ]
    }
} 
文件样本

"fields": {
   "created" : "2020-08-03T10:50:08.626+0100", 
}
我在m head中阅读这篇文章,因为“获取所有文档,其中
字段。创建的
大于2020-01-01,小于2021-01-01”,所以我希望所有文档都在2020年创建

我正在使用Mongo版本4.2.8

我的推理是否有误,或者我是否应该以不同的方式这样做

编辑:

更新后的查询现在看起来像:

db.getCollection("issues").aggregate(
    [
        { 
            "$addFields" : { 
                "created_at_date" : { 
                    "$toDate" : "$fields.created"
                }
            }
        }, 
        { 
            "$match" : { 
                "fields.issueType.name" : "Bug", 
                "fields.resolutionDate" : { 
                    "$exists" : false
                }, 
                "$expr" : { 
                    "$and" : [
                        { 
                            "$gt" : [
                                "created_at_date", 
                                ISODate("2020-01-01T00:00:00.000+0000")
                            ]
                        }, 
                        { 
                            "$lt" : [
                                "created_at_date", 
                                ISODate("2021-01-01T00:00:00.000+0000")
                            ]
                        }
                    ]
                }
            }
        }, 
    ]

实际上,您的
$和
正在工作。真正的问题是,它找不到任何大于或等于
新日期(“2020-01-01T00:00:00.0Z”)
且小于或等于
新日期(“2020-01-01T00:00:00.0Z”)
的文档,这就是它总是返回空文档列表的原因


分别使用
$gt
$lt
而不是
$gte
$lte
,创建的
字段的数据类型是什么?请共享显示该字段的示例文档。您有一个字符串类型的日期数据。不能将字符串与日期对象进行比较。您可以使用
$toDate
聚合运算符将字符串转换为日期类型(然后进行比较)。您是对的,我已将值转换为日期,但仍然返回一个空文档数组,其他条件如何-它们匹配吗?是的,它们匹配,删除整个
$expr
,查询按预期工作