【发布时间】:2020-05-22 18:24:18
【问题描述】:
我想读写一个 mongodb 数据库。要创建一个条目,我使用以下代码:
private void updateMongoDb(TagEnum tag, BigDecimal minLen, BigDecimal maxLen,
List<BigDecimal> defaultLengths,
List<Double> lengthMultipliers, boolean useLengthMultipliers) {
TagPreferences tagPreferences = new TagDepositPreferences();
tagPreferences.setProvider(tag);
tagPreferences.setMinLen(minLen);
tagPreferences.setMaxLen(maxLen);
tagPreferences.setDefaultLengths(defaultLengths);
tagPreferences.setLengthMultipliers(lengthMultipliers);
tagPreferences.setUseLengthMultipliers(useLengthMultipliers);
Query query = new Query();
query.addCriteria(Criteria.where("tag").is(tag));
query.addCriteria(Criteria.where("minLen").is(minLen));
query.addCriteria(Criteria.where("maxLen").is(maxLen));
query.addCriteria(Criteria.where("defaultLengths").is(defaultLengths));
query.addCriteria(Criteria.where("lengthMultipliers").is(lengthMultipliers));
query.addCriteria(Criteria.where("useLengthMultipliers").is(useLengthMultipliers));
Update update = new Update();
update.setOnInsert(tagPreferences.CREATED_AT, Instant.now());
update.set(tagPreferences.LAST_MODIFIED_AT, Instant.now());
update.set("tag", tagPreferences.getTag());
update.set("minLen", tagPreferences.getMinLen());
update.set("maxLen", tagPreferences.getMaxLen());
update.set("defaultLengths", tagPreferences.getDefaultLengths());
update.set("useLengthMultipliers", tagPreferences.isUseLengthMultipliers());
update.set("lengthMultipliers", tagPreferences.getLengthMultipliers());
mongoTemplate.upsert(query, update, TagPreferences.class);
}
要从中读取,我有一个带有方法的存储库类
TagPreferences findAllByTag(TagEnum tag);
我愿意:
TagPreferences tagPreferences = tagPreferencesRepository.findAllByTag(TagEnum tag);
问题是当我只执行一次updateMongoDb 时,当我执行findAllByTag() 方法时,我总是得到三个具有相同值的结果,而不是一个。如果您能解释其背后的根本原因并提出更正建议,那将非常有帮助。
【问题讨论】:
-
findAllByTag是做什么的? -
它的定义是:List
findAllByTag(TagEnum tag);它返回一个 TagPreferences 对象列表,这些对象与调用方法时传递的参数的要求相匹配。问题是,当我只插入 TagEnum x 的一个 TagPreferences 对象,然后调用 findAllByTag(x) 时,我得到的不是包含一个对象的列表,而是 3。 -
数据库中是否有多个带有
x的文档,或者findAllByTag复制了响应? -
谢谢。我在开发程序时添加了多个条目。我创建了一个删除它们的方法( void deleteAllByTag(TagEnum tagEnum); 然后只添加了我想要的条目,现在我得到了正确的结果。
标签: java spring mongodb spring-boot java-8