【发布时间】:2020-05-02 17:00:19
【问题描述】:
我是 mongoDb 的新手,因为我试图从不同的集合中查询,为了做到这一点,当我从类别集合中获取数据时,我的意思是当我从集合中运行 select * 时,它会抛出错误 MongoError:游泳池被毁。
据我了解,这是因为一些 find({}) 正在创建一个池并且正在被销毁。
我在模型内部使用的代码如下,
const MongoClient = require('mongodb').MongoClient;
const dbConfig = require('../configurations/database.config.js');
export const getAllCategoriesApi = (req, res, next) => {
return new Promise((resolve, reject ) => {
let finalCategory = []
const client = new MongoClient(dbConfig.url, { useNewUrlParser: true });
client.connect(err => {
const collection = client.db(dbConfig.db).collection("categories");
debugger
if (err) throw err;
let query = { CAT_PARENT: { $eq: '0' } };
collection.find(query).toArray(function(err, data) {
if(err) return next(err);
finalCategory.push(data);
resolve(finalCategory);
// db.close();
});
client.close();
});
});
}
当我在这里的发现是我使用的时候
让查询 = { CAT_PARENT: { $eq: '0' } }; collection.find(query).toArray(function(err, data) {})
当我使用 find(query) 时,它会返回数据,但使用 {} 或 $gte/gt 它会引发池错误。
我在控制器中编写的代码如下,
import { getAllCategoriesListApi } from '../models/fetchAllCategory';
const redis = require("redis");
const client = redis.createClient(process.env.REDIS_PORT);
export const getAllCategoriesListData = (req, res, next, query) => {
// Try fetching the result from Redis first in case we have it cached
return client.get(`allstorescategory:${query}`, (err, result) => {
// If that key exist in Redis store
if (false) {
res.send(result)
} else {
// Key does not exist in Redis store
getAllCategoriesListApi(req, res, next).then( function ( data ) {
const responseJSON = data;
// Save the Wikipedia API response in Redis store
client.setex(`allstorescategory:${query}`, 3600, JSON.stringify({ source: 'Redis Cache', responseJSON }));
res.send(responseJSON)
}).catch(function (err) {
console.log(err)
})
}
});
}
谁能告诉我我在这里犯了什么错误。我如何解决池问题。 提前谢谢你。
【问题讨论】:
-
你的驱动版本是多少?
标签: node.js mongodb mongoose mongodb-query mlab