我正在使用mongodb java驱动程序通过maven存储库(如下面的pom.xml中)来查询日期范围与聚合框架之间的事务。 java驱动程序生成以下$ match,我试图在mongo控制台上验证并发现它不起作用:
db.transactions.aggregate(
{ "$match" :
{
"created_at" : { "$gt" : { "$date" : "2001-04-12T12:00:00.000Z"} , "$lte" : { "$date" : "2020-04-13T12:00:00.000Z"}}
}
}
)
如果我删除$ date块并将其替换为ISOdate函数和日期字符串,那么它似乎正在工作。我无法理解为什么它在java中不起作用($ match JSON - 我从eclipse中获取并尝试使用mongo控制台并且不能正常工作。)
pom.xml
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.11.0</version>
</dependency>
有没有人知道为什么$ date不使用MongoDB v2.4.0聚合?
答案 0 :(得分:3)
我删除了""
&amp; $
中$date
字段的$match
前缀。
对于$date
,$gt
&amp; $lte
所以它应该看起来像
db.transactions.aggregate(
{ "$match" :
{
'created_at': {
$gt: "2001-04-12T12:00:00.000Z",
$lt: "2020-04-13T12:00:00.000Z"
}
}
});
答案 1 :(得分:0)
在传递到$ match聚合之前,您必须先格式化日期。
Order.aggregate([
{
$match: {
createdAt: {
$gte: new Date(req.body.startDate),
$lt: new Date(req.body.endDate)
}
}
},
{
$lookup: {
from: 'acbinstallerpayments',
localField: "_id",
foreignField: 'customerObjectID',
as: 'installerPaymentDetails'
}
}
]);