Java Mongodb(v2.4.0)$匹配聚合不适用于日期范围
我使用MongoDBJava驱动程序通过maven存储库(如下pom.xml中所示)使用聚合框架查询日期范围之间的事务。java驱动程序生成以下$match,我试图在mongo控制台上验证它,但发现它不起作用:Java Mongodb(v2.4.0)$匹配聚合不适用于日期范围,java,mongodb,mongodb-query,aggregation-framework,Java,Mongodb,Mongodb Query,Aggregation Framework,我使用MongoDBJava驱动程序通过maven存储库(如下pom.xml中所示)使用聚合框架查询日期范围之间的事务。java驱动程序生成以下$match,我试图在mongo控制台上验证它,但发现它不起作用: db.transactions.aggregate( { "$match" : { "created_at" : { "$gt" : { "$date" : "2001-04-12T12:00:00.000Z"} , "$lte" : { "$date" :
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
org.mongodb
mongo java驱动程序
2.11.0
有人知道为什么$date不能使用MongoDB v2.4.0处理聚合吗?我通过删除
&$
中$date
字段的$match
前缀解决了这个问题。
对于您,请删除$date
,$gt
和$lte
所以它应该看起来像
db.transactions.aggregate(
{ "$match" :
{
'created_at': {
$gt: "2001-04-12T12:00:00.000Z",
$lt: "2020-04-13T12:00:00.000Z"
}
}
});
在传递到$match aggregate之前,必须格式化日期
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'
}
}
]);
试试这个答案,如果不起作用就告诉我。。如果不起作用,请向我们提供数据库中数据存储的信息。因为我假设
date
是您文档中创建的中的一个嵌入字段。我尝试了它,但它不起作用。我提供的代码是由MongoDB java驱动程序生成的,因此我不认为“”是个问题。在日期字段中创建并保存ISO日期格式。请在下面查找JSON以供参考:{“created_at”:ISODate(“2013-04-18T10:42:22Z”),“payment_token”:“f7e595ec-1cdd-4e5d-93c5-eca8e5f9f876”}我已根据您提供的JSON更新了我的答案。请试着让我们知道。由于相同的代码在MongoDB 2.2.3中也适用于我,我希望它在您的版本上也能正常工作,没有问题。不,它不起作用。我正在使用mongodb-win32-x86_64-2.4.0(即v2.4.0)抱歉,根据过去的转换,我没有得到任何线索来解决。。。但是可以肯定的是,下面提供的代码确实可以在我的机器上使用。我正在使用CFMongoDB(ColdFusion)和mongojava驱动程序,并且这种格式可以工作。我不得不在“$gt”
和“$lt”
周围添加引号,但这可能只是ColdFusion的一个要求。(注意:有效的JSON需要双引号。也许java驱动程序目前不关心,但将来可能会关心。)谢谢,这很有效。在发送日期时创建日期对象可以正常工作。
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'
}
}
]);