我想将以下控制台mongodb查询转换为Spring mongoTemplate查询
db.transaction.find({"account_number":10}, {"entry_date":{"$gte": new ISODate("2016-07-20"),"$lte": new ISODate("2016-07-21")}}).count()
我试着跟随
Query query = new Query();
Criteria criteria =
Criteria.where("account_number").is(accountNumber).and("account_code").is(accountCode)
.and("entry_date").gte(start).lte(end);
query.addCriteria(criteria);
mongoTemplate.find(query, Transaction.class, "transaction");
return mongoTemplate.find(query, Transaction.class, "transaction");
在调试时,我把上面的代码翻译成下面的查询值。查询没有返回与mongo控制台相同的结果。
Query: { "account_number" : 10 , "account_code" : 2102 , "entry_date" : { "$gte" : "2015-05-20" , "$lte" : "2016-07-21"}}
问题是我如何像在控制台上那样用find构建一个查询来传递两个不同的条件?
{
"_id" : ObjectId("5825e49585a4caf2bfa30ff4"),
"profit" : "",
"account_number" : 280,
"m_number" : "",
"registration_number" : "",
"page_number" : "",
"entry_date" : ISODate("2014-10-20T07:33:57Z"),
"narration" : "To cash",
"voucher_number" : "",
"debit_credit" : -4400,
"account_code" : 2105,
"created_at" : ISODate("2014-10-20T07:33:57Z"),
"updated_at" : ISODate("2014-10-20T07:33:57Z"),
"employee_id" : 0,
"balance" : 0,
"credit" : 0,
"debit" : 0,
"particulars" : "",
"since_last" : 0,
"transaction_type" : 0,
"voucher_path" : "",
"branch" : "",
"auto_voucher_number" : "",
"check_book_series" : ""
}
{
"_id" : ObjectId("5825e49585a4caf2bfa30ff5"),
"profit" : "",
"account_number" : 1555,
"m_number" : "",
"registration_number" : "",
"page_number" : "",
"entry_date" : ISODate("2014-10-20T07:33:57Z"),
"narration" : "To",
"voucher_number" : 73804,
"debit_credit" : -1550,
"account_code" : 2101,
"created_at" : ISODate("2014-10-20T07:33:57Z"),
"updated_at" : ISODate("2014-10-20T07:33:57Z"),
"employee_id" : 0,
"balance" : 0,
"credit" : 0,
"debit" : 0,
"particulars" : "",
"since_last" : 0,
"transaction_type" : 0,
"voucher_path" : "",
"branch" : "",
"auto_voucher_number" : "",
"check_book_series" : ""
}
原始查询只返回account_number=10的记录,并忽略entry_date条件。我想这是错误的询问方式。以下是正确的解决方案
DateTime start, DateTime end;
Query query = new Query();
Criteria criteria =
Criteria.where("account_number").is(accountNumber).and("account_code").is(accountCode)
.and("entry_date").gte(start).lte(end);
query.addCriteria(criteria);
return mongoTemplate.find(query, Transaction.class, "transaction");
日期的格式正确是很重要的。例如java.util.Date或JODA DateTime
您将日期作为字符串传递。尝试以java.util.date类型传递开始日期和结束日期。例如
LocalDate startLocalDate = LocalDate.of(2014, 10, 19);
Date startDate = Date.from(startLocalDate.atStartOfDay().toInstant(ZoneOffset.UTC));
Criteria criteria = Criteria.where("entry_date").gte(startDate);
> 每个对象表示一个重复发生的事件。该事件可以在多个日期发生。因此,请考虑以下内容: 我有一个日历在客户端,用户可以选择一个日期范围。 > 对所选日期范围的每个条目进行调用,并在客户端处理聚合。问题是会有大量的读取,因为我们会多次读取重叠的日期范围内的同一个列表对象。 尝试使用类似ElasticSearch/Algolia的服务来完成此操作 任何建议都会很有帮助!
问题内容: 我有一个ID为,状态和员工日期范围的数据集。 下面给出的输入数据集是一名员工的详细信息。 记录中的日期范围是连续的(按确切顺序),因此第二行的开始日期将是第一行的结束日期的下一个日期。 如果员工连续休假不同的月份,则该表将存储日期范围不同的信息。 例如:在输入集中,员工已从‘16 -10-2016’休病假到‘31 -12-2016’,并在‘1-1-2017’重新加入。 因此,该项目有3
audit_modifier是VARCHAR2(30个字符),并且audit_modifier值以以下格式存储[2018-01-18T17:19:47.285z]。 从TO_DATE('2018-01-16','yyyy-mm-dd')和TO_DATE('2018-01-16','yyyy-mm-dd')之间的trunc(audit_modifier)的表中选择*; ORA-00932:不一致的数
问题内容: 假设我有个约会2013年6月20日 如何获取上周的日期范围,即本例中的6月9日至6月15日。 另外,如果日期是2013年6月2日 范围应该是5月26日至6月1日 问题答案: 这是基于Java日历的解决方案 输出 它已本地化,在我的“语言环境”周中,从星期一开始
在方括号 […] 中的几个字符或者字符类意味着“搜索给定的字符中的任意一个”。 集合 比如说,[eao] 意味着查找在 3 个字符 'a'、'e' 或者 `‘o’ 中的任意一个。 这被叫做一个集合。集合可以在正则表达式中和其它常规字符一起使用。 // 查找 [t 或者 m],然后再匹配 “op” alert( "Mop top".match(/[tm]op/gi) ); // "Mop", "to
我正在尝试使用Node Lambda函数在日期范围之间进行扫描。我正确扫描了数据,但我似乎无法让日期表达式正确工作。 这目前并没有试图在一个范围内返回,它只是现在查看一个日期。我不想在表达式中添加一个和,直到我知道这是可行的。 我的DynamoDB中的示例文档的结构如下: 文档id是我的主键。我对Lamdba和DynamoDB的组合还很陌生,所以我可能把它完全设置错了,但这是我通过研究成功完成的。