Поиск…


Вступление

MongoDB является одной из самых популярных баз данных NoSQL, благодаря помощи стека MEAN. Взаимодействие с базами данных Mongo из Express-приложения выполняется быстро и просто, как только вы понимаете синтаксис типа «произвольный». Мы будем использовать Мангуста, чтобы помочь нам.

замечания

Более подробную информацию можно найти здесь: http://mongoosejs.com/docs/guide.html

Установка MongoDB

npm install --save mongodb
npm install --save mongoose //A simple wrapper for ease of development

В вашем файле сервера (обычно называемом index.js или server.js)

const express = require('express');
const mongodb = require('mongodb');
const mongoose = require('mongoose');
const mongoConnectString = 'http://localhost/database name';

mongoose.connect(mongoConnectString, (err) => {
  if (err) {
    console.log('Could not connect to the database');
  }
});

Создание модели Мангуста

const Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;

const Article = new Schema({
  title: {
    type: String,
    unique: true,
    required: [true, 'Article must have title']
  },
  author: {
    type: ObjectId,
    ref: 'User'
  }
});

module.exports = mongoose.model('Article, Article);

Давайте рассмотрим это. MongoDB и Mongoose используют JSON (фактически BSON, но это не имеет значения здесь) в качестве формата данных. Вверху, я установил несколько переменных, чтобы уменьшить набор.

Я создаю new Schema и назначаю ее константе. Это простой JSON, и каждый атрибут - это еще один объект со свойствами, которые помогают обеспечить более согласованную схему. Уникальные силы вставляют в базу данных новые экземпляры, очевидно, уникальные. Это отлично подходит для предотвращения создания пользователем нескольких учетных записей в службе.

Требуется другое, объявленное как массив. Первый элемент - это логическое значение, а второе сообщение об ошибке должно быть вставлено или обновлено.

ObjectIds используются для отношений между моделями. Примерами могут быть «У пользователей много комментариев». Вместо ObjectId могут использоваться другие атрибуты. Строки, такие как имя пользователя, являются одним из примеров.

Наконец, экспорт модели для использования с вашими маршрутами API обеспечивает доступ к вашей схеме.

Запрос вашей базы данных Mongo

Простой запрос GET. Предположим, что модель из приведенного выше примера находится в файле ./db/models/Article.js .

const express = require('express');
const Articles = require('./db/models/Article');

module.exports = function (app) {
  const routes = express.Router();
  
  routes.get('/articles', (req, res) => {
    Articles.find().limit(5).lean().exec((err, doc) => {
      if (doc.length > 0) {
        res.send({ data: doc });
      } else {
        res.send({ success: false, message: 'No documents retrieved' });
      }
    });
  });

app.use('/api', routes);
};

Теперь мы можем получить данные из нашей базы данных, отправив HTTP-запрос этой конечной точке. Несколько ключевых моментов:

  1. Limit делает именно то, на что похоже. Я получаю только 5 документов.
  2. Lean удаляет некоторые вещи из сырой BSON, уменьшая сложность и накладные расходы. Не требуется. Но полезно.
  3. При использовании find вместо findOne убедитесь, что doc.length больше 0. Это происходит потому, что find всегда возвращает массив, поэтому пустой массив не будет обрабатывать вашу ошибку, если он не проверяется на длину
  4. Мне лично нравится отправлять сообщение об ошибке в этом формате. Измените его в соответствии с вашими потребностями. То же самое для возвращаемого документа.
  5. Код в этом примере написан в предположении, что вы поместили его в другой файл, а не непосредственно на экспресс-сервер. Чтобы вызвать это на сервере, включите эти строки в код сервера:
const app = express();
require('./path/to/this/file')(app) // 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow