3 回答
![?](http://img1.sycdn.imooc.com/545850200001359c02200220-100-100.jpg)
TA贡献1943条经验 获得超7个赞
如果您正在尝试创建一个 API 来根据标题搜索 mongoDB 集合,即;文本字段尝试实现 mongoDB 的文本搜索功能:在 mongoDB 中进行文本搜索 ,只需在标题字段上创建一个文本索引,然后使用 post 方法创建一个 API,该 API 接受可以针对标题字段查询的参数。
文本搜索可能有点棘手,它可以帮助您进行模糊/部分/全文搜索 - 使用正则表达式也非常有益。
![?](http://img1.sycdn.imooc.com/54586425000103f602200220-100-100.jpg)
TA贡献1821条经验 获得超4个赞
首先,您需要async/await用于模块化您的代码。我建议不要在你的controller.js文件中写你的全部代码,API 可以按照(路由 - 控制器 - utils)的方式制作。
postRoutes.js
postRouter.get('/search-post', postCtr.searchPost);
postController.js
const postUtils = require('./postUtils');
const postController = {};
postController.searchPost = async (req, res) => {
try {
const { title } = req.query;
const result = await postUtils.searchPost(title);
return res.status(200).json(result);
} catch (err) {
return res.status(err.code).json({ error: err.error });
}
};
module.exports = postController;
postUtils.js
const Post = require('./postModel');
const postUtils = {};
postUtils.searchPost = async (title) => {
try {
let result = [];
if(title){
// Even you can perform regex in your search
result = await Post.find({ title: title });
}
return result;
} catch (err) {
const errorObj = { code: 500, error: 'Internal server error' }; // It can be dynamic
throw errorObj;
}
};
module.exports = postUtils;
postModel.js
const mongoose = require('mongoose');
const postSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user',
required: true,
},
// Your fields ...
}, { collection: 'post', timestamps: true });
const post = mongoose.model('post', postSchema);
module.exports = post;
使用这种结构,您可以轻松调试代码,而且它也易于管理。
![?](http://img1.sycdn.imooc.com/545847aa0001063202200220-100-100.jpg)
TA贡献1828条经验 获得超13个赞
在您上面指定的链接中,他们使用存储在名为 的文件中的对象数组store.js,但不是 mongoDB。因此,他们直接使用Array.filter方法进行过滤。
但是在使用 mongoose(对象建模工具)的 mongoDB 中,您可以使用collection.find()方法。
所以你的问题的解决方案如下
postController.search = async (req, res) => {
var response = [];
if (req.query.title) {
response = await db.Post.find({title: req.query.title});
}
res.json(response);
};
find 是内置的查询方法,有助于查询集合,您可以传递多个属性进行查询。
添加回答
举报