字段在 findOne 上给出 null 或 [] 并通过 mongoose 查找否则它的工作正常"/>
mongodb atlas 集合的特定字段在 findOne 上给出 null 或 [] 并通过 mongoose 查找否则它的工作正常
我正在使用 Node Express 和 Mongodb Atlas 以及 mongoose 构建一个 Rest api
这些是供参考的文件,我不知道为什么我总是在通过 train_no 搜索值时得到 null 或空数组,如果我使用 train_name 或 train_no 以外的其他东西,它即使对于 _id 也能正常工作,但它没有为此提供任何价值
// model of the train collection
const mongoose = require("mongoose")
const seatSchema = new mongoose.Schema({
charges_per_100km: Number,
total_coach: Number,
general_seats: Number,
ladies_seats: Number,
tatkal_seats: Number,
senior_citizen: Number
})
const stationSchema = new mongoose.Schema({
no: Number,
code: String,
station: String,
state: String,
arrival: String,
departure: String,
halt: Number,
day: Number,
distance: Number,
distanceFromSrc: Number,
dayofarrival: Number
})
const trainSchema = new mongoose.Schema({
train_no: {
type: Number,
unique: [true, 'train with same no already exist']
},
type: String,
train_name: String,
schedule:String,
distanceInKM: {
type: Number,
},
runtime: {
days: Number,
hours: Number,
mins: Number
},
stops: Number,
avgSpeed: String,
Route: [stationSchema],
seatsAvailibility: {
firstAc: seatSchema,
secondAc: seatSchema,
thirdAc: seatSchema,
sleeper: seatSchema,
chaircar: seatSchema,
executivecar: seatSchema,
accar:seatSchema
},
classes:String,
return:Number
}, { timestamps: true })
const Train = mongoose.model('Train', trainSchema);
module.exports = Train;
//route for the query
const express = require('express');
const router = express.Router();
const { protect, authorize } = require('../middlewares/auth');
const { addTrain, editTrainByTrainID, getTrainByTrainID, deleteTrainByTrainID } = require('../controllers/train')
router.get('/',(req,res)=>{
res.status(200).json({
msg:"Welcome to Train Requests"
})
})
router.post('/addTrain', protect, authorize(['admin']), addTrain);
router.get('/:train_id', protect, authorize(['admin']), getTrainByTrainID);
router.put('/:train_id', protect, authorize(['admin']), editTrainByTrainID);
router.delete('/:train_id', protect, authorize(['admin']), deleteTrainByTrainID);
router.post('/search', SearchTrain)
module.exports = router;
// Controllers
const ErrorResponse = require('../utils/errorResponse');
const asyncHandler = require('../middlewares/async');
const Train = require("../models/train")
const fs = require("fs")
exports.addTrain = asyncHandler(async (req, res, next) => {
const train = await Train.create(req.body);
train.save();
res.status(200).json({
success: true,
data: train
})
})
exports.getTrainByTrainID = asyncHandler(async (req, res, next) => {
await Train.find({
train_no: req.params["train_id"]
}, (err, train) => {
if (err) {
console.log(err);
}
res.status(200).json({
success: true,
train, param: req.params
})
})
})
exports.editTrainByTrainID = asyncHandler(async (req, res, next) => {
const fieldsToUpdate = req.body;
let train = await Train.findOneAndUpdate({ train_no: req.params.train_id }, fieldsToUpdate, {
new: true,
runValidators: true
})
res.status(200).json({
success: true,
data: train
})
})
exports.deleteTrainByTrainID = asyncHandler(async (req, res, next) => {
await Train.findOneAndDelete({ train_no: req.params.train_id });
res.status(200).json({
success: true,
data: {}
})
})
我期待这个查询通过它的 train_no 返回特定的火车数据,该数据存在于我的 mongodb atlas 中。
回答如下:更多推荐
mongodb atlas 集合的特定字段在 findOne 上给出 null 或 [] 并通过 mongoose 查找否则它的工作正常
发布评论