【发布时间】:2022-01-18 20:32:14
【问题描述】:
我正在尝试使用 mongodb 作为数据库引擎在 springboot 上做一个简单的 get 查询
我已经尝试过几种方法(将数据作为 ObjectId 发送,甚至更改存储库)
public ResponseEntity<Track> get(String trackId) {
Track find = mongoTemplate.findById(new ObjectId(trackId), Track.class);
Optional<Track> track = tracksRepository.findById(trackId);
if (track.isPresent()) {
return new ResponseEntity<>(track.get(), HttpStatus.OK);
}
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
使用 mongo 配置
@Configuration
@EnableMongoRepositories(basePackages = "data.store.repositories")
public class MongoConfig extends AbstractMongoClientConfiguration {
private final Logger LOGGER = Logger.getLogger(this.getClass().getSimpleName());
@Primary
@Bean
@Override
public MongoClient mongoClient() {
return MongoClients.create(MongoClientSettings.builder()
.applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress(host, port))))
.build());
}
private MongoCredential mongoCredentials() {
return MongoCredential.createCredential(username, database, password.toCharArray());
}
@Bean
public MongoTemplate mongoTemplate() {
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient(), getDatabaseName());
mongoTemplate.setReadPreference(ReadPreference.secondaryPreferred());
return mongoTemplate;
}
protected String getDatabaseName() {
return database;
}
@Override
public boolean autoIndexCreation() {
return false;
}
}
编辑:为上下文添加类
@Document("track")
public class Track {
@Id
@Field(ATTR_ID)
@JsonProperty(ATTR_ID)
public String id;
public static final String ATTR_ID = "id";
}
并始终为空,我的数据库中存在现有键。你能帮我找出问题吗?
提前致谢
【问题讨论】:
-
StackOverflow 避免我粘贴更多数据。我正在使用 gradle classpath("org.springframework.boot:spring-boot-gradle-plugin:2.6.2")
-
更准确地说,我尝试了所有这些答案stackoverflow.com/questions/60023943/…
-
你也可以发布
Track课程吗? -
我也尝试将@MongoId 添加到其中(抱歉将其添加到 cmets。所以不会让我将其添加到帖子中)
-
你有两个
findById方法——一个在tracksRepository 上,另一个在mongoTemplate 上。哪个不工作
标签: java mongodb spring-boot