gpt4 book ai didi

Java MongoDB 查询条件(WHERE date > X and field = value)忽略第二个子句

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:49 24 4
gpt4 key购买 nike

import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

public class CustomQuery {

@Autowired private MongoOperations mongoOperations;

public void customQuery(Date submittalDate) {

List<Question> q1s = mongoOperations.find(
new Query(Criteria.where("category").is("New")),
Question.class);

List<Question> q2s = mongoOperations.find(
new Query(
Criteria.where("submittalDate").gt(submittalDate).and("category").is("New")
),
Question.class);
}
}

顶级 Spring Java MongoDB 查询在 q1s 中返回预期结果。

底部查询应该返回顶部查询的一个子集。相反,匹配 ("submittalDate").gt(submittalDate) 的记录位于 q2s 结果中,无论它们是否属于"new"类别。

即这就像第二个查询中的 and("category").is("New") 被忽略了。

将 Mongodb 版本 v2.0.6 32 位与 Spring Data 结合使用。

感谢帮助。

2012 年 5 月 9 日更新

还是不行

2012 年 8 月 26 日更新

这会在 Mongo 命令行上返回结果:

db.foo.find( {   "submittalDate":{ "$gte": ISODate("2012-07-31T23:00:00.000Z")  }, "category" : "New"    } )

相比之下,Java 代码(对于相同的日期参数)不起作用。为了比较,DEBUG 从 Java 记录的查询是:

[DEBUG] [http-8080-1] (MongoTemplate.java:doFind:1256) find using query: 
{ "submittalDate" : { "$gte" : { "$date" : "2012-07-31T23:00:00.000Z"}} , "category" : "New"}

是的,日志记录了一个日期字符串,而要使 Mongo shell 正常工作,我需要使用 ISODate(..)。但是我正在使用具有可接受类型的 java.util.Date 的 MongoDB Java 驱动程序 - ISODate(..) 怎么可能没有出现?问题可能有其他原因。

最佳答案

我不是 spring 专家,但看起来你的一些导入可能相互冲突。鉴于我看过的文档,很难准确诊断出哪里出错了。如果您不打算为此使用 spring 框架,则下面是另一种/更常见的方法。

import com.mongodb.Mongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;

public class CustomQuery {

public void customQuery(Date submittalDate)
{
document = new BasicDBObject();
document.put(("submittalDate").greaterThanEquals(submittalDate).put("category").is("New").get());
DBCursor cursor = getDbCollection().find(document);

}

}

关于Java MongoDB 查询条件(WHERE date > X and field = value)忽略第二个子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12040811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com