Задать вопрос
@antonsr98
Системный Администратор

Как получить все записи из базы в mongodb на nodejs?

День Добрый, решил написать для себя простенький сайт заодно наконец начать учить JS. За задачу взял написать для себя небольшой rest api сервис. пишу по ману
возник вопрос в мане есть операции получения записи по id, обновление записи по id, удаление записи, но нет получения всех записей. Пробовал вызвать получение всех записей путем вызова
router.get('/birdss', async ctx => ctx.body = await Birds.find({}))
по поучаю ошибку что Birds не определено. Подскажите плз как решить задачку

cat app.js
const Koa = require('koa');
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser');
const config = require('config');
const handleErrors = require('./middlewares/handleErrors');
const db = require('./db');
 
const app = new Koa();
const router = new Router();
 
app.use(handleErrors);
app.use(bodyParser());

router.get('/articles', async ctx => ctx.body = await Articles.find({}))
 
router.post('/articles', async (ctx, next) => {
	const data = ctx.request.body;
	ctx.body = await db.Article.insertOne(data);
});

router.get('/articles/:id', async (ctx, next) => {
	const id = ctx.params.id;
	ctx.body = await db.Article.findOneById(id);
});

app.use(router.routes());
 
db
.connect()
.then(() => {
	app.listen(config.port, () => {
		console.info(`Listening to http://localhost:${config.port}`);
	});
})
.catch((err) => {
	console.error('ERR:', err);
});


cat model.js

const ObjectId = require('mongodb').ObjectID;
 
class Model {
	constructor(db, collectionName) {
		this.name = collectionName;
		this.db = db;
	}

	async insertOne(data) {
		const operation = await this.db.collection(this.name).insertOne(data);
		if (operation.result.ok !== 1 || operation.ops.length !== 1) {
			throw new Error('Db insertOne error');
		}
		return operation.ops[0];
	}

	async findOneById(id) {
		let query = {
			_id: ObjectId(id)
		}
		const result = await this.db.collection(this.name).findOne(query);
		if (!result) {
			throw new Error('Db findOneById error');
		}
		return result;
	}
}
 
module.exports = Model;
  • Вопрос задан
  • 2975 просмотров
Подписаться 1 Оценить 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
AlexZeDim
@AlexZeDim
Зависит от того, в каком виде, где и как их необходимо получить. Пример с mongoose который на 100% отображает все документы которые уже находятся в коллекции:
Сперва: npm i mongoose и в package.json добавляем:
"dependencies": {
    "mongodb": "^2.2.25", //сама MongoDB, она должна быть обязательно
    "mongoose": "4.8.0", //это для mongoose - мангуст, наш случай
    "mongo": "~2.2.25" //это для mongo-native-driver, если работаем через него
}


var mongoose = require('mongoose'); //берем мангуст
mongoose.connect('mongodb://localhost/в_какую_базу_коннектимся'); //указываем куда


var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {}); //коннектимся к базе

var Schema = new mongoose.Schema({ //задаем схему
    поле: Значение,
    field: String
});

var server = mongoose.model('имя коллекции',Schema); //схему-в-модель

server.find({}, null, {sort: 'критерий сортировки'},function (err, res) {
    console.log (res); //вот здесь будут все документы
});


То же самое, только для mongo-native-driver, прямо на главной странице с документацией с заголовком Find all Documents

Если же есть необходимость просто-посмотреть какие документы находится сейчас внутри коллекции, то этот код через mongo-shell может вам помочь
var collections = db.getCollectionNames();
for(var i = 0; i< collections.length; i++) {    
   print('Collection: ' + collections[i]); // print the name of each collection
   db.getCollection(collections[i]).find().forEach(printjson); //and then print     the json of each of its elements
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы