mongodb 无法实现搜索功能,获取错误:对于模型\“Post\”的路径\"_id\”处的值\“search\”(类型字符串),转换为ObjectId失败

vsmadaxz  于 2022-12-12  发布在  Go
关注(0)|答案(1)|浏览(97)

大家好!我是一个网络开发的新手,一直在Youtube上看mern项目教程。我正在尝试实现帖子的搜索功能。帖子存储在MongoDB中。在插入标题和/或标签后,搜索表单总是得到这个错误。{“message”:“对于模型“Post”,在路径“_id”处,值“search”(类型字符串)转换为ObjectId失败}。我想mongoose会把我的搜索请求错当成_id req.param,但我不确定。有什么建议如何解决这个错误吗?
.models\Post.js

import mongoose from 'mongoose'

const PostSchema = new mongoose.Schema(
    {
        title: String,
        message: String,
        name: String,
        creator: String, 
        tags: [String],
        selectedFile: String,
        likes: {
            type: [String],
            default: [],
        },
        createdAt: {
            type: Date,
            default: new Date()
        }
    }
)

const Post = mongoose.model('Post', PostSchema)

export default Post

controllers\posts.js

export const getPostsBySearch = async (req, res) => {
    const { searchQuery, tags } = req.query;

    try {
        const title = new RegExp(searchQuery, "i");

        const posts = await Post.find({ $or: [ { title }, { tags: { $in: tags.split(',') } } ]}).exec();

        res.json({ data: posts });
    } catch (error) {    
        res.status(404).json({ message: error.message });
    }
}

axios端点

export const fetchPostsBySearch = (searchQuery) => API.get(`/posts/search?searchQuery=${searchQuery.search || 'none'}&tags=${searchQuery.tags}`);

actions\posts.js

export const getPostsBySearch = (searchQuery) => async (dispatch) => {
  try {
    dispatch({ type: START_LOADING });
    const { data: { data } } = await api.fetchPostsBySearch(searchQuery);

    dispatch({ type: FETCH_BY_SEARCH, payload: { data } });
    dispatch({ type: END_LOADING });
  } catch (error) {
    console.log(error);
  }
};
9jyewag0

9jyewag01#

例如,只需更改路由名称
/v1/search”中的所有参数都是空的。
如果你想在一个页面上搜索一个新的内容,那么你可以在这里找到它。

相关问题