Java 如何在mongoDB中插入数据

Java 如何在mongoDB中插入数据,java,spring,mongodb,spring-boot,java-8,Java,Spring,Mongodb,Spring Boot,Java 8,我想从mongodb数据库中读写。要创建条目,我使用以下代码: private void updateMongoDb(TagEnum tag, BigDecimal minLen, BigDecimal maxLen, List<BigDecimal> defaultLengths, List<Double> lengthMultipliers, boolean useLengthMu

我想从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 tagPreferences = tagPreferencesRepository.findAllByTag(TagEnum tag);

问题是,当我只执行一次
updateMongoDb
时,当我执行
findAllByTag()
方法时,我总是得到三个值相同的结果,而不是一个。如果您能解释这背后的根本原因并提出纠正建议,那将非常有帮助。

@Joe在评论部分给出了解决方案。问题是,在重复运行程序之后,mongo数据库中填充了不相关的条目。这可以通过创建

void deleteAllByTag(TagEnum tagEnum);

方法,并从顶部的
updateMongoDb()
方法内部调用它。

@Joe在评论部分给出了解决方案。问题是,在重复运行程序之后,mongo数据库中填充了不相关的条目。这可以通过创建

void deleteAllByTag(TagEnum tagEnum);

方法,并从顶部的
updateMongoDb()
方法内部调用它。

findAllByTag做什么?它的定义是:List findAllByTag(TagEnum标记); 它返回TagPreferences对象的列表,这些对象与调用该方法时传递的参数的要求相匹配。问题是,当我只插入TagEnum x的一个TagPreferences对象,然后调用findAllByTag(x),而不是返回包含一个对象的列表时,我得到了3。数据库中是否有多个文档具有
x
,或者findAllByTag是否复制了响应?谢谢。我在开发程序时添加了多个条目。我创建了一个删除它们的方法(void deleteAllByTag(TagEnum TagEnum);然后只添加了我想要的条目,现在我得到了正确的结果。
findAllByTag
do做什么?它的定义是:List findAllByTag(TagEnum标记);它返回一个TagPreferences对象列表,这些对象与调用该方法时传递的参数的要求相匹配。问题是,当我只插入TagEnum x的一个TagPreferences对象,然后调用findAllByTag(x)时,而不是返回包含一个对象的列表,我得到了3。数据库中是否有多个带有
x
的文档,或者findAllByTag是否复制了响应?谢谢。我在开发程序时添加了多个条目。我创建了一个删除它们的方法(void deleteAllByTag(TagEnum TagEnum));然后只添加了我想要的条目,现在我得到了正确的结果。