MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

स्प्रिंग बूट के साथ MongoDB क्वेरी लॉग करना

1. अवलोकन

स्प्रिंग डेटा MongoDB का उपयोग करते समय, हमें डिफ़ॉल्ट स्तर की तुलना में उच्च स्तर पर लॉग इन करने की आवश्यकता हो सकती है। आम तौर पर, हमें उदाहरण के लिए, कुछ अतिरिक्त जानकारी जैसे कथन निष्पादन या क्वेरी पैरामीटर देखने की आवश्यकता हो सकती है।

इस संक्षिप्त ट्यूटोरियल में, हम देखेंगे कि प्रश्नों के लिए MongoDB लॉगिंग स्तर को कैसे संशोधित किया जाए।

2. MongoDB क्वेरी लॉगिंग कॉन्फ़िगर करें

MongoDB समर्थन MongoOperations प्रदान करता है इंटरफ़ेस या इसका प्राथमिक MongoTemplate डेटा तक पहुँचने के लिए कार्यान्वयन, इसलिए हमें केवल MongoTemplate . के लिए डिबग स्तर को कॉन्फ़िगर करने की आवश्यकता है वर्ग.

किसी भी स्प्रिंग या जावा एप्लिकेशन की तरह, हम लॉगर लाइब्रेरी का उपयोग कर सकते हैं और MongoTemplate के लिए लॉगिंग स्तर निर्धारित कर सकते हैं।

आमतौर पर, हम अपनी कॉन्फ़िगरेशन फ़ाइल में कुछ इस तरह लिख सकते हैं:

<logger name="org.springframework.data.mongodb.core.MongoTemplate" level="DEBUG" />

हालांकि, अगर हम स्प्रिंग बूट एप्लिकेशन चला रहे हैं , हम इसे अपने application.properties . में कॉन्फ़िगर कर सकते हैं फ़ाइल:

logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG

इसी तरह, हम YAML . का उपयोग कर सकते हैं वाक्य रचना:

logging:
  level:
    org:
      springframework:
        data:
          mongodb:
            core:
              MongoTemplate: DEBUG

3. लॉगिंग के लिए टेस्ट क्लास

सबसे पहले, आइए एक पुस्तक बनाएं कक्षा:

@Document(collection = "book")
public class Book {

    @MongoId
    private ObjectId id;
    private String bookName;
    private String authorName;

    // getters and setters
}

हम एक साधारण परीक्षण वर्ग बनाना चाहते हैं और लॉग देखना चाहते हैं।

इसे प्रदर्शित करने के लिए, हम एंबेडेड MongoDB का उपयोग करते हैं। सुनिश्चित करने के लिए, आइए पहले अपनी निर्भरता की जांच करें :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <version>${embed.mongo.version}</version>
    <scope>test</scope>
</dependency>

अंत में, स्प्रिंग बूट टेस्ट का उपयोग करके अपनी टेस्ट क्लास को परिभाषित करें:

@SpringBootTest
@TestPropertySource(properties = { "logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG" })
public class LoggingUnitTest {

    private static final String CONNECTION_STRING = "mongodb://%s:%d";

    private MongodExecutable mongodExecutable;
    private MongoTemplate mongoTemplate;

    @AfterEach
    void clean() {
        mongodExecutable.stop();
    }

    @BeforeEach
    void setup() throws Exception {
        String ip = "localhost";
        int port = 27017;

        ImmutableMongodConfig mongodbConfig = MongodConfig.builder()
          .version(Version.Main.PRODUCTION)
          .net(new Net(ip, port, Network.localhostIsIPv6()))
          .build();

        MongodStarter starter = MongodStarter.getDefaultInstance();
        mongodExecutable = starter.prepare(mongodbConfig);
        mongodExecutable.start();
        mongoTemplate = new MongoTemplate(MongoClients.create(String.format(CONNECTION_STRING, ip, port)), "test");
    }
    // tests
}

4. लॉग नमूने

इस खंड में, हम कुछ साधारण परीक्षण मामलों को परिभाषित करेंगे और सबसे सामान्य परिदृश्यों का परीक्षण करने के लिए सापेक्ष लॉग दिखाएंगे, जैसे कि दस्तावेज़ को खोजना, सम्मिलित करना, अद्यतन करना या एकत्र करना। एस.

4.1. सम्मिलित करें

सबसे पहले, एक दस्तावेज़ को सम्मिलित करने के साथ शुरू करते हैं :

Book book = new Book();
book.setBookName("Book");
book.setAuthorName("Author");

mongoTemplate.insert(book);

लॉग दिखाते हैं कि हम किस संग्रह में सम्मिलित कर रहे हैं। दस्तावेज़ ढूंढते समय , आईडी भी लॉग इन है:

[2022-03-20 17:42:47,093]-[main] DEBUG MongoTemplate - Inserting Document containing fields: [bookName, authorName, _class] in collection: book
...
[2022-03-20 17:42:47,144]-[main] DEBUG MongoTemplate - findOne using query: { "id" : { "$oid" : "623759871ff6275fe96a5ecb"}} fields: Document{{}} for class: class com.baeldung.mongodb.models.Book in collection: book
[2022-03-20 17:42:47,149]-[main] DEBUG MongoTemplate - findOne using query: { "_id" : { "$oid" : "623759871ff6275fe96a5ecb"}} fields: {} in db.collection: test.book

4.2. अपडेट करें

इसी तरह, दस्तावेज़ . को अपडेट करते समय :

Book book = new Book();
book.setBookName("Book");
book.setAuthorName("Author");

mongoTemplate.insert(book);

String authorNameUpdate = "AuthorNameUpdate";

book.setAuthorName(authorNameUpdate);
mongoTemplate.updateFirst(query(where("bookName").is("Book")), update("authorName", authorNameUpdate), Book.class);

हम वास्तविक अद्यतन दस्तावेज़ . देख सकते हैं लॉग में फ़ील्ड:

[2022-03-20 17:48:31,759]-[main] DEBUG MongoTemplate - Calling update using query: { "bookName" : "Book"} and update: { "$set" : { "authorName" : "AuthorNameUpdate"}} in collection: book

4.3. बैच सम्मिलित करें

आइए बैच प्रविष्टि के लिए एक उदाहरण जोड़ें:

Book book = new Book();
book.setBookName("Book");
book.setAuthorName("Author");

Book book1 = new Book();
book1.setBookName("Book1");
book1.setAuthorName("Author1");

mongoTemplate.insert(Arrays.asList(book, book1), Book.class);

हम सम्मिलित किए गए दस्तावेज़ . की संख्या देख सकते हैं लॉग में:

[2022-03-20 17:52:00,564]-[main] DEBUG MongoTemplate - Inserting list of Documents containing 2 items

4.4. हटाएं

साथ ही, हटाने के लिए एक उदाहरण जोड़ें:

Book book = new Book();
book.setBookName("Book");
book.setAuthorName("Author");

mongoTemplate.insert(book);

mongoTemplate.remove(book);

हम लॉग में देख सकते हैं, इस मामले में, हटाए गए दस्तावेज़ . की आईडी :

[2022-03-20 17:56:42,151]-[main] DEBUG MongoTemplate - Remove using query: { "_id" : { "$oid" : "62375cca2a2cba4db774d8c1"}} in collection: book.

4.5. एकत्रीकरण

आइए एकत्रीकरण . के लिए एक उदाहरण देखें . इस मामले में, हमें एक परिणाम वर्ग को परिभाषित करने की आवश्यकता है। उदाहरण के लिए, हम लेखक के नाम से एकत्रित करेंगे:

public class GroupByAuthor {

    @Id
    private String authorName;
    private int authCount;

    // getters and setters
}

इसके बाद, समूहीकरण के लिए एक परीक्षण मामला परिभाषित करते हैं:

Book book = new Book();
book.setBookName("Book");
book.setAuthorName("Author");

Book book1 = new Book();
book1.setBookName("Book1");
book1.setAuthorName("Author");

Book book2 = new Book();
book2.setBookName("Book2");
book2.setAuthorName("Author");

mongoTemplate.insert(Arrays.asList(book, book1, book2), Book.class);

GroupOperation groupByAuthor = group("authorName")
  .count()
  .as("authCount");

Aggregation aggregation = newAggregation(groupByAuthor);

AggregationResults<GroupByAuthor> aggregationResults = mongoTemplate.aggregate(aggregation, "book", GroupByAuthor.class);

हम लॉग में देख सकते हैं कि हमने किस क्षेत्र को एकत्रित किया है और किस प्रकार की एकत्रीकरण पाइपलाइन:

[2022-03-20 17:58:51,237]-[main] DEBUG MongoTemplate - Executing aggregation: [{ "$group" : { "_id" : "$authorName", "authCount" : { "$sum" : 1}}}] in collection book

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सी # के साथ मोंगोडीबी में केवल एक निर्दिष्ट फ़ील्ड प्राप्त करें

  2. मोंगोडीबी बनाम MySQL

  3. MongoDB $dateFromParts

  4. स्ट्रिंग से डेट डेटा प्रकार में कैसे परिवर्तित करें?

  5. वर्तमान दस्तावेज़ फ़ील्ड मान के भीतर भू-स्थानिक $नियर