Пустой объект ответа в MongoDb

108
11

Я пытаюсь получить все документы в коллекции mongo, но вместо этого получаю пустой ответ. мое имя базы данных - taskDb, в котором есть коллекция с именем item, в котором хранятся все документы. Я думаю, может быть, есть какая-то проблема с схемой, но mongo - схема меньше db, поэтому я не могу найти решение.

index.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var cors = require('cors');

app.use(bodyParser.json());
app.use(cors());

Items = require('./items.js');

mongoose.connect('mongodb://localhost/taskDb');
var db = mongoose.connection;

app.get("/",(req, res)=> {
res.send('Visit /api/*****');
});

app.get("/api/items",(req, res)=> {
Items.getItems(function(err, items){
if(err){
throw err;
}
console.log(res.json(items));
res.json(items);
});
});

// app.get("/api/matches",(req, res)=> {
// Matches.getMatches(function(err, matches){
// if(err){
// throw err;
// }
// res.json(matches);
// });
// });

// app.get("/api/deliveries/:playerName",(req, res)=> {
// Deliveries.getPlayerStats(req.params.playerName ,function(err, deliveries){
// if(err){
// throw err;
// }
// res.json(deliveries);
// });
// });

app.listen(3005,()=>{
console.log('Listening on port 3005...');
});

item.js

var mongoose = require('mongoose');

var itemSchema = mongoose.Schema({
_ID:{
type: String,
required: true
},
ITEM:{
type: String,
required: true
},
KEY:{
type: Number,
required: true
},
STATUS:{
type: String,
required: true
}
});

var Item = module.exports = mongoose.model('item', itemSchema);

// module.exports.getPlayerStats = function (playerName, callback) {
// Deliveries.aggregate([{$project:{_id: 1,batsman: 1 ,batsman_runs: 1, dismissal:{
// $cond: [ { $eq: ["$player_dismissed", playerName ] }, 1, 0]
// }}},{ $match: { batsman: playerName } },
// { $group: {_id: "$batsman", total_runs: { $sum: "$batsman_runs" },total_dismissal: { $sum: "$dismissal"}}}
// ], callback);
// }

module.exports.getItems = function (callback, limit) {
Item.find(callback).limit(limit);
};

спросил(а) 2021-01-25T14:25:45+03:00 5 месяцев назад
1
Решение
124

В функции getItems есть две проблемы:

Условие для find() не указано. Если вы хотите прочитать все записи, вы можете указать его как пустой объект. Предельный параметр не передается из вашего обработчика запроса в функцию getItems. Вам нужно либо по умолчанию использовать его, либо обрабатывать сценарий, где limit не будет передан.

Изменение работы getItems() на что-то вроде ниже должно работать:

module.exports.getItems = function (callback, limit) {
Item.find({}, callback).limit(limit || 20); // Default limit to a feasible number
};

Кроме того, вы можете передать ограничение функции getItems() из обработчика запроса, если вы хотите переопределить значение по умолчанию:

app.get("/api/items",(req, res)=> {
Items.getItems(function(err, items){
if(err){
throw err;
}
console.log(res.json(items));
return res.json(items);
}, 50); // Pass limit
});

ответил(а) 2021-01-25T14:25:45+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема