Id kết nối mongodb

Nếu bạn bắt đầu dự án với react-starter-kit [ứng dụng web đẳng cấu] thì có thể bạn sẽ cần cách kết nối với cơ sở dữ liệu MongoDb

api/người dùng. js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const user = await db.collection('user').findOne({ _id: new ObjectID(req.params.id) }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;

/config. js

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};

người phục vụ. js

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});

Nếu có vấn đề gì chưa hiểu, vui lòng comment lại, mình sẽ giải đáp nhé

Nguồn. Vừa phải

Nhân Nguyễn

Kỹ sư công nghệ thông tin đang làm việc tại Tokyo, Nhật Bản. Đam mê lập trình web và mobile, yêu thích ứng dụng tối ưu tốc độ cũng như cải thiện quy trình làm việc để phát triển sản phẩm chất lượng

Hướng dẫn này hướng dẫn bạn quy trình sử dụng Spring Data MongoDB để xây dựng một ứng dụng lưu trữ dữ liệu và truy xuất dữ liệu đó từ MongoDB, một cơ sở dữ liệu dựa trên tài liệu

Những gì bạn sẽ xây dựng

Bạn sẽ lưu trữ

$ port install mongodb
1 POJO (Các đối tượng Java cũ đơn giản) trong cơ sở dữ liệu MongoDB bằng cách sử dụng Spring Data MongoDB

Những gì bạn cần

  • Khoảng 15 phút

  • Trình soạn thảo văn bản hoặc IDE yêu thích

  • JDK 1. 8 hoặc muộn hơn

  • Lớp 4+ hoặc Maven 3. 2+

  • Bạn cũng có thể nhập thẳng mã vào IDE của mình

    • Bộ công cụ mùa xuân (STS)

    • Ý TƯỞNG IntelliJ

    • VSCode

Làm thế nào để hoàn thành hướng dẫn này

Giống như hầu hết các hướng dẫn Bắt đầu với Spring, bạn có thể bắt đầu từ đầu và hoàn thành từng bước hoặc bạn có thể bỏ qua các bước thiết lập cơ bản đã quen thuộc với bạn. Dù bằng cách nào, bạn sẽ kết thúc với mã làm việc

Để bắt đầu lại từ đầu, hãy chuyển sang phần Bắt đầu với Spring Initializr

Để bỏ qua những điều cơ bản, hãy làm như sau

  • Tải xuống và giải nén kho lưu trữ nguồn cho hướng dẫn này hoặc sao chép nó bằng Git.

    $ port install mongodb
    2

  • cd into

    $ port install mongodb
    3

  • Tiếp tục cài đặt và khởi chạy MongoDB

Khi bạn hoàn thành, bạn có thể kiểm tra kết quả của mình với mã trong

$ port install mongodb
4

Bắt đầu với Khởi tạo mùa xuân

Bạn có thể sử dụng dự án được khởi tạo trước này và nhấp vào Tạo để tải xuống tệp ZIP. Dự án này được cấu hình để phù hợp với các ví dụ trong hướng dẫn này

Để khởi tạo dự án theo cách thủ công

  1. Điều hướng đến https. //bắt đầu. mùa xuân. io. Dịch vụ này thu thập tất cả các phụ thuộc bạn cần cho một ứng dụng và thực hiện hầu hết các thiết lập cho bạn

  2. Chọn Gradle hoặc Maven và ngôn ngữ bạn muốn sử dụng. Hướng dẫn này giả định rằng bạn đã chọn Java

  3. Nhấp vào Phụ thuộc và chọn Dữ liệu mùa xuân MongoDB

  4. Nhấp vào Tạo

  5. Tải xuống tệp ZIP kết quả, đây là kho lưu trữ ứng dụng web được định cấu hình theo lựa chọn của bạn

Nếu IDE của bạn có tích hợp Spring Initializr, bạn có thể hoàn tất quy trình này từ IDE của mình

Bạn cũng có thể rẽ nhánh dự án từ Github và mở nó trong IDE hoặc trình chỉnh sửa khác của bạn

Cài đặt và khởi chạy MongoDB

Khi dự án của bạn được thiết lập, bạn có thể cài đặt và khởi chạy cơ sở dữ liệu MongoDB

Nếu bạn sử dụng Mac với Homebrew, bạn có thể chạy lệnh sau

$ brew install mongodb

Với MacPorts, bạn có thể chạy lệnh sau

$ port install mongodb

Đối với các hệ thống khác có quản lý gói, chẳng hạn như Redhat, Ubuntu, Debian, CentOS và Windows, hãy xem hướng dẫn tại https. // tài liệu. mongodb. org/thủ công/cài đặt/

Sau khi bạn cài đặt MongoDB, bạn có thể khởi chạy nó trong cửa sổ bảng điều khiển bằng cách chạy lệnh sau (lệnh này cũng khởi động quy trình máy chủ)

$ mongod

Bạn sẽ thấy đầu ra tương tự như sau

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
0

Xác định một thực thể đơn giản

MongoDB là kho lưu trữ tài liệu NoSQL. Trong ví dụ này, bạn lưu trữ

$ port install mongodb
1 đối tượng. Danh sách sau đây cho thấy lớp Khách hàng (trong
$ port install mongodb
6)

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
3

Ở đây bạn có một lớp

$ port install mongodb
1 với ba thuộc tính.
$ port install mongodb
8,
$ port install mongodb
9 và
$ mongod
0.
$ port install mongodb
8 chủ yếu dành cho MongoDB sử dụng nội bộ. Bạn cũng có một hàm tạo duy nhất để điền vào các thực thể khi tạo một phiên bản mới

Trong hướng dẫn này, các getters và setters điển hình đã bị bỏ qua vì lý do ngắn gọn

$ port install mongodb
8 phù hợp với tên tiêu chuẩn cho ID MongoDB, do đó, nó không yêu cầu bất kỳ chú thích đặc biệt nào để gắn thẻ cho Dữ liệu mùa xuân MongoDB

Hai thuộc tính khác,

$ port install mongodb
9 và
$ mongod
0, không được chú thích. Người ta cho rằng chúng được ánh xạ tới các trường có cùng tên với chính các thuộc tính đó

Phương pháp

$ mongod
5 tiện lợi in ra thông tin chi tiết về khách hàng

MongoDB lưu trữ dữ liệu trong các bộ sưu tập. Dữ liệu mùa xuân MongoDB ánh xạ lớp

$ port install mongodb
1 vào một bộ sưu tập có tên là
$ mongod
7. Nếu bạn muốn thay đổi tên của bộ sưu tập, bạn có thể sử dụng chú thích
$ mongod
8 của Spring Data MongoDB trên lớp

Tạo truy vấn đơn giản

Spring Data MongoDB tập trung vào lưu trữ dữ liệu trong MongoDB. Nó cũng kế thừa chức năng từ dự án Spring Data Commons, chẳng hạn như khả năng truy xuất truy vấn. Về cơ bản, bạn không cần học ngôn ngữ truy vấn của MongoDB. Bạn có thể viết một số phương thức và các truy vấn được viết cho bạn

Để xem điều này hoạt động như thế nào, hãy tạo giao diện kho lưu trữ truy vấn tài liệu

$ port install mongodb
1, như danh sách sau (trong
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
00) cho thấy

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
8

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
01 mở rộng giao diện
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
02 và bổ sung loại giá trị và ID mà nó hoạt động với.
$ port install mongodb
1 và
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
04, tương ứng. Giao diện này đi kèm với nhiều thao tác, bao gồm các thao tác CRUD tiêu chuẩn (tạo, đọc, cập nhật và xóa)

Bạn có thể xác định các truy vấn khác bằng cách khai báo chữ ký phương thức của chúng. Trong trường hợp này, hãy thêm

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
05, về cơ bản là tìm tài liệu loại
$ port install mongodb
1 và tìm tài liệu khớp với
$ port install mongodb
9

Bạn cũng có

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
08, tìm danh sách những người theo họ

Trong một ứng dụng Java điển hình, bạn viết một lớp triển khai

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
01 và tự tạo các truy vấn. Điều khiến Spring Data MongoDB trở nên hữu ích là bạn không cần tạo triển khai này. Spring Data MongoDB tạo nó một cách nhanh chóng khi bạn chạy ứng dụng

Bây giờ bạn có thể kết nối ứng dụng này và xem nó trông như thế nào

Tạo một lớp ứng dụng

Spring Initializr tạo một lớp đơn giản cho ứng dụng. Danh sách sau đây cho thấy lớp mà Initializr đã tạo cho ví dụ này (trong

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
30)

$ port install mongodb
9

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
31 là một chú thích tiện lợi có thêm tất cả những điều sau đây

  • export default {
      database: {
        url: 'mongodb://localhost:27017/example'
      }
    };
    
    32. Gắn thẻ lớp làm nguồn định nghĩa bean cho ngữ cảnh ứng dụng

  • export default {
      database: {
        url: 'mongodb://localhost:27017/example'
      }
    };
    
    33. Yêu cầu Spring Boot bắt đầu thêm các bean dựa trên cài đặt đường dẫn lớp, các bean khác và các cài đặt thuộc tính khác nhau. Ví dụ: nếu
    export default {
      database: {
        url: 'mongodb://localhost:27017/example'
      }
    };
    
    34 nằm trên đường dẫn lớp, thì chú thích này sẽ đánh dấu ứng dụng là ứng dụng web và kích hoạt các hành vi chính, chẳng hạn như thiết lập một
    export default {
      database: {
        url: 'mongodb://localhost:27017/example'
      }
    };
    
    35

  • export default {
      database: {
        url: 'mongodb://localhost:27017/example'
      }
    };
    
    36. Yêu cầu Spring tìm kiếm các thành phần, cấu hình và dịch vụ khác trong gói
    export default {
      database: {
        url: 'mongodb://localhost:27017/example'
      }
    };
    
    37, để nó tìm bộ điều khiển

Phương thức

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
38 sử dụng phương thức
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
39 của Spring Boot để khởi chạy một ứng dụng. Bạn có nhận thấy rằng không có một dòng XML nào không? . Ứng dụng web này là Java thuần 100% và bạn không phải đối phó với việc định cấu hình bất kỳ hệ thống ống nước hoặc cơ sở hạ tầng nào

Spring Boot tự động xử lý các kho lưu trữ đó miễn là chúng được bao gồm trong cùng một gói (hoặc gói phụ) của lớp

export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
31 của bạn. Để kiểm soát nhiều hơn quá trình đăng ký, bạn có thể sử dụng chú thích
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
82

Theo mặc định,

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
82 quét gói hiện tại để tìm bất kỳ giao diện nào mở rộng một trong các giao diện kho lưu trữ của Spring Data. Bạn có thể sử dụng
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
84 của nó để yêu cầu Spring Data MongoDB quét một gói gốc khác theo loại một cách an toàn nếu bố cục dự án của bạn có nhiều dự án và nó không tìm thấy kho lưu trữ của bạn

Dữ liệu mùa xuân MongoDB sử dụng

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
85 để thực hiện các truy vấn đằng sau các phương thức
import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
86 của bạn. Bạn có thể tự mình sử dụng mẫu cho các truy vấn phức tạp hơn, nhưng hướng dẫn này không đề cập đến điều đó. (xem Hướng dẫn tham khảo Spring Data MongoDB)

Bây giờ bạn cần sửa đổi lớp đơn giản mà Initializr đã tạo cho bạn. Bạn cần thiết lập một số dữ liệu và sử dụng nó để tạo đầu ra. Danh sách sau đây cho thấy lớp

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
87 đã hoàn thành (trong
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
30)

$ port install mongodb
8

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
87 bao gồm một phương thức
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
38 tự động kết nối một thể hiện của
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
01. Dữ liệu mùa xuân MongoDB tự động tạo một proxy và đưa nó vào đó. Chúng tôi sử dụng
export default {
  database: {
    url: 'mongodb://localhost:27017/example'
  }
};
01 thông qua một số thử nghiệm. Đầu tiên, nó lưu một số đối tượng
$ port install mongodb
1, thể hiện phương thức
$ port install mongodb
94 và thiết lập một số dữ liệu để sử dụng. Tiếp theo, nó gọi
$ port install mongodb
95 để lấy tất cả các đối tượng
$ port install mongodb
1 từ cơ sở dữ liệu. Sau đó, nó gọi
$ port install mongodb
97 để lấy một
$ port install mongodb
1 duy nhất theo tên của cô ấy. Cuối cùng, nó gọi
$ port install mongodb
99 để tìm tất cả các khách hàng có họ là
$ port install mongodb
80

Theo mặc định, Spring Boot cố gắng kết nối với một phiên bản MongoDB được lưu trữ cục bộ. Đọc tài liệu tham khảo để biết chi tiết về cách trỏ ứng dụng của bạn tới một phiên bản MongoDB được lưu trữ ở nơi khác

Xây dựng một JAR thực thi

Bạn có thể chạy ứng dụng từ dòng lệnh với Gradle hoặc Maven. Bạn cũng có thể xây dựng một tệp JAR có thể thực thi duy nhất chứa tất cả các phụ thuộc, lớp và tài nguyên cần thiết rồi chạy tệp đó. Xây dựng một jar thực thi giúp dễ dàng vận chuyển, tạo phiên bản và triển khai dịch vụ dưới dạng một ứng dụng trong suốt vòng đời phát triển, trên các môi trường khác nhau, v.v.

Nếu bạn sử dụng Gradle, bạn có thể chạy ứng dụng bằng cách sử dụng

$ port install mongodb
81. Ngoài ra, bạn có thể tạo tệp JAR bằng cách sử dụng
$ port install mongodb
82 rồi chạy tệp JAR, như sau

$ brew install mongodb
3

Nếu bạn sử dụng Maven, bạn có thể chạy ứng dụng bằng cách sử dụng

$ port install mongodb
83. Ngoài ra, bạn có thể xây dựng tệp JAR bằng
$ port install mongodb
84 rồi chạy tệp JAR như sau

$ brew install mongodb
6

Các bước được mô tả ở đây tạo một JAR có thể chạy được. Bạn cũng có thể tạo tệp WAR cổ điển

Khi

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';

const PORT = process.env.PORT || 3000;
const server = express();

server.use('/api/users', require('./api/users'));

server.get('/', (req, res) => {
  res.send('Hello World');
});

MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  server.locals.db = db;
  server.listen(PORT, () => {
    const { address, port }  = server.address();
    logger.info(`Node.js server is listening at http://${address}:${port}`);
  });
});
87 triển khai
$ port install mongodb
86, phương thức
$ port install mongodb
87 sẽ tự động được gọi khi khởi động Spring Boot. Bạn sẽ thấy một cái gì đó giống như sau (với đầu ra khác, chẳng hạn như truy vấn)

$ port install mongodb
0

Bản tóm tắt

Xin chúc mừng. Bạn đã thiết lập máy chủ MongoDB và viết một ứng dụng đơn giản sử dụng Spring Data MongoDB để lưu các đối tượng và tìm nạp chúng từ cơ sở dữ liệu, tất cả mà không cần viết triển khai kho lưu trữ cụ thể

Nếu bạn muốn hiển thị các kho lưu trữ MongoDB với giao diện người dùng RESTful dựa trên hypermedia với ít nỗ lực, hãy đọc Truy cập dữ liệu MongoDB bằng REST

Xem thêm

Các hướng dẫn sau đây cũng có thể hữu ích

  • Truy cập dữ liệu MongoDB bằng REST

  • Truy cập dữ liệu với JPA

  • Truy cập dữ liệu bằng Gemfire

  • Truy cập dữ liệu với MySQL

  • Truy cập dữ liệu với Neo4j

Bạn muốn viết một hướng dẫn mới hoặc đóng góp cho một hướng dẫn hiện có?

Tất cả các hướng dẫn được phát hành với giấy phép ASLv2 cho mã và giấy phép Commons sáng tạo Attribution, NoDerivatives cho văn bản