代码之家  ›  专栏  ›  技术社区  ›  kinhs

使用req.query通过ObjectId mongoose和node来定位与用户相关联的所有帖子的最佳方式是什么

  •  0
  • kinhs  · 技术社区  · 5 年前

    如何最好地使用用户的objectId来定位与用户相关的所有帖子?我使用的是mongoose和node.js。

    我目前有以下代码:

    router.get("/", async(req, res) => {
    
    const username = req.query.user;  // req.query is inbuilt. The last word .user is the keyword that will be used to query your logic
    const catName = req.query.cat;
    
    try {
       let posts;
    
       if(username) {
           posts = await Post.find({username: username})
       }
       else if(catName) {
            posts = await Post.find({categories:{
                $in:[catName]
            }})
       }
       else {
           posts = await Post.find()
       }
    
       res.status(200).json(posts)
    } catch(err) {
        res.status(500).json(err)
    }
    })
    

    这对我不起作用。我想在你点击用户名后获得用户的所有帖子。用户名对我不起作用,因为我使用了 .populate() 方法从mongoose引用用户名到我的用户模型从后模型。所以,username现在是objectId。

    如何使用他们的objectId查询?

    0 回复  |  直到 5 年前
        1
  •  0
  •   kinhs    5 年前

    对于任何可能经历过这一挑战的人,尤其是我们这些仍在学习的人。我是如何解决问题的: 由于使用了populate()方法,username现在是一个被引用的objectId,所以我在postposter中使用的用户名是这样的 localhost:5000/api/posts?user/dave

    “dave”是用户的用户名。这不起作用,因为mongoose正在等待objectId来获取用户。所以,经过几个小时的搜索,我想到了使用objectId而不是用户名,这很有效。我只能获取那个objectId发布的帖子。 我不得不在我的React.js中做同样的事情。我的反应路线查询如下所示:

    <Link to={`/?user=${singleItem.username._id}`} className="link">
    

    现在一切都很好。