mongoose查询子集的子集

发布于 2022-09-06 22:11:54 字数 1804 浏览 9 评论 0

首先,我的mongoose的models如下:

var clubsSchema = new mongoose.Schema({
    "clubCreatetime": String,
    "clubCreater": String,
    "clubName": String,
    "clubDescription": String,
    "clubImage": String,
    "clubMenbers": [String],
    "clubTopics": [{
        "topicCreatetime": String,
        "topicCreater": String,
        "topicTitle": String,
        "topicContent": String,
        "topicComment": [{
            "userId": String,
            "userName": String,
            "commentCreatetime": String,
            "commentContent": String
        }],
        "topicLike": [String],
        "topicState": String
    }],
    "clubState": String
})

然后,我的代码如下:

let orgId = req.param("orgId");
  let topicId = req.param("topicId");
  Club.findOne({
    _id: orgId
  }, function(clubErr, clubDoc){
    //console.log(clubDoc);
    if(clubErr){
      res.json({
        status: '1',
        msg: clubErr.message,
        result: '查找该社团失败!'
      })
    } else {
      clubDoc.clubTopics.findOne({
        _id: topicId
      }, function(topicErr, topicDoc){
        console.log(topicDoc);
        if(topicErr){
          res.json({
            status: '1',
            msg: topicErr.message,
            result: '查找该话题失败!'
          })
        } else {
          res.json({
            status:'0',
            msg: '查找该话题成功!',
            result: topicDoc
          })
        }
      })
    }
  })

在这里,我是想通过路由中的社团Id,先找到该社团;然后在根据路由中的话题Id,去查询该话题全部内容。但是,它提示我.findOne()这方法不存在,所以想求教下,我要根据id查询社团下的该话题,要怎么写呢?谢谢!

目前想到的返回话题信息的方法是:

for(let i=0; i<clubDoc.clubTopics.length; i++){
    if(clubDoc.clubTopics[i]._id==topicId){
        console.log(clubDoc.clubTopics[i]);
    }
}

想问下mongoose有没有更直接的方法???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌辣 2022-09-13 22:11:54

可以给clubTopics建一个模型,社团里存id,ref指向clubTopics这个集合,查询的时候用populate填充
http://mongoosejs.com/docs/po...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文