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
,查询按预期工作