javascript - Mongoose深度查找查询

标签 javascript node.js mongodb mongoose

所以,我的 MongoDB 中有一个名为 Post 的集合,如下所示:

var PostSchema = new mongoose.Schema({
    creator: {
       type: ObjectId,
       ref: 'User',
       required: true
    },
    content: {
        type: String,
        required: true
    },
    title: {
        type: String,
        required: true
    },
    post_type: {
        type: String,
        required: true
    },
    view_type: {
        type: String,
        required: true
    },
    comments: [{
       type: ObjectId,
        ref: 'Comment'
    }],
    reports: [{
        type: ObjectId,
        ref: 'Report'
    }],
    attachments: [{
        type: ObjectId,
        ref: 'Attachment'
    }],
    created_at: {
        type: Date,
        default: Date.now
    },
    updated_at: {
        type: Date,
        default: Date.now
    }
});

以及用户集合

var UserSchema = new mongoose.Schema({
    email: {
        type: String,
        unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    course: {
        type: ObjectId,
        ref: 'Course',
        required: true
    },
    school: {
        type: ObjectId,
        ref: 'School',
        required: true
    },
    access: {
        type: ObjectId,
        ref: 'Access',
        required: true
    },
    classroom: {
        type: ObjectId,
        ref: 'Classroom'
    },
    created_at: {
        type: Date,
        default: Date.now
    },
    updated_at: {
        type: Date,
        default: Date.now
    }
});

我想要的是一种对帖子进行查询的方法,以获取与登录用户具有相同教室的所有帖子(在 session 中保存),我尝试使用 where 和 find 但没有成功,是否有这样做的方法?

最佳答案

您可以使用如下所示的嵌套查询:

User.find({classroom: req.session.user.classroom}).select('_id')
  .exec(function (err, users) {
    ids = users.map(function(user) {
      return user._id
    });
    Post.find({creator: {$in: ids}}, function(err, posts) {
      console.log(posts);
    });
});

假设 req.session.user 是您将用户保存在 session 对象上的方式。如果没有,请根据需要进行修改。

为了澄清起见,我们将用户的 id 映射到一个名为 ids 的数组,因为 $in 查询条件需要一个 ObjectIDs 数组。

关于javascript - Mongoose深度查找查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31776782/

相关文章:

javascript - typeof 函数修复/替代

javascript - 浏览器如何知道图像是否已加载?

javascript - 使用 fs.writefilesync 写入 NodeJS 中的文件

java - 插入嵌入式文档而不阅读整个文档 - spring,mongo

javascript - jquery - 根据其他元素的 CSS 属性控制元素的 CSS 属性

javascript - 使用 getJson 进行 php 查询的变量

node.js - Visual Studio Code - 使用检查器协议(protocol)进行调试

javascript - setGame 的问题

javascript - 打开 MongoDB 数据库

mongodb - 对集合进行排序和分页