Mvitimin / Microservices_study

Study for MSA
0 stars 0 forks source link

MongoDB #13

Open Mvitimin opened 8 months ago

Mvitimin commented 8 months ago

https://www.mongodb.com/compatibility/spring-boot https://www.baeldung.com/spring-data-mongodb-tutorial

Spring Data MongoDB

Entity 대신에 @Document를 붙여야한다.

interface UserRepository extends Repository<User, Long> { … }

@Document
class User { … }

Spring Boot MongoDB API implementation


public interface ItemRepository extends MongoRepository<GroceryItem, String> {

    @Query("{name:'?0'}")
    GroceryItem findItemByName(String name);

    @Query(value="{category:'?0'}", fields="{'name' : 1, 'quantity' : 1}")
    List<GroceryItem> findAll(String category);

    public long count();

}

MongoDB and Spring Boot CRUD examples

spring.data.mongodb.uri=mongodb+srv://<username>:<pwd>@<cluster>.mongodb.net/mygrocerylist
spring.data.mongodb.database=mygrocerylist

@SpringBootApplication
@EnableMongoRepositories
public class MdbSpringBootApplication implements CommandLineRunner{

    @Autowired
    ItemRepository groceryItemRepo;

    public static void main(String[] args) {
        SpringApplication.run(MdbSpringBootApplication.class, args);
    }
}

Using MongoTemplate

To perform update operations using a particular field, we can also use the MongoTemplate class. The nice thing about MongoTemplate is that the update can be done in a single database interaction.

@Component
public class CustomItemRepositoryImpl implements CustomItemRepository {

    @Autowired
    MongoTemplate mongoTemplate;

    public void updateItemQuantity(String name, float newQuantity) {
        Query query = new Query(Criteria.where("name").is(name));
        Update update = new Update();
        update.set("quantity", newQuantity);

        UpdateResult result = mongoTemplate.updateFirst(query, update, GroceryItem.class);

        if(result == null)
            System.out.println("No documents updated");
        else
            System.out.println(result.getModifiedCount() + " document(s) updated..");

    }

}
Mvitimin commented 8 months ago

MongoDB

https://www.mongodb.com/docs/manual/tutorial

Project Fields to Return from Query

A projection can explicitly include several fields by setting the to 1 in the projection document.

findPublisher = collection.find(eq("status", "A")).projection(include("item", "status"));
SELECT _id, item, status from inventory WHERE status = "A"
Mvitimin commented 8 months ago

MongoDB In Action

https://github.com/bakks/mongo-in-action-code

1장

인덱스