最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

请参阅使用猫鼬后收集用户数据

IT培训 admin 5浏览 0评论

请参阅使用猫鼬后收集用户数据

我创建的登录和注册页面和用户数据被存储用户收藏。也做了功能添加和查看由用户的loggedIn创建新的岗位。所以每当一个用户创建的帖子,我需要收集后在指用户数据(用户名)。我已经检查了一些论坛,但无法理解填入方法。我需要知道在架构引用的数据以及如何从用户采集获取的数据,并收集后在使用它。

这里是用户模型

var UserSchema = new mongoose.Schema({
    username: {
        type: String,
        index: true
    },
    password: {
        type: String
    }, 
    email: {
        type: String
    },
    name: {
        type: String
    },
    profileimage: {
        type: String
    },
    uposts: [{ type: Schema.Types.ObjectId, ref: 'Post'}]
});

var User = module.exports = mongoose.model('User', UserSchema);

这里是邮政型号

var PostSchema = new mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    postimage: {
        type: String
    },
    author: {
            type: Schema.Types.ObjectId,
            ref: "User"
        // username: String
    },

});

var Post = module.exports = mongoose.model('Post', PostSchema);

路线为增加新的岗位

router.post('/add', upload.single('postimage'), (req, res, next) => {
    if(req.file) {
        console.log('Uploading File..');
        var postimage = req.file.filename;
        } else {
        console.log('No File Uploaded');
        var postimage = 'noimage.jpg';
    }

    var newPost = new Post({
        postimage: postimage
      });

      Post.createPost(newPost, (err, post) => {
        if(err) throw err;
         console.log(post);
      });

  req.flash('success', 'Successfully Created Posts');

  res.location('/');
  res.redirect('/');

});

路由器显示的帖子

router.get('/view', ensureAuthenticated,  (req, res, next) => {
    // res.render('viewpost', { user: req.user });
    Post.find({_id: {$ne: req.user._id}}, (err, posts) => {
        if(err) {
          console.log(err);
        } else {
          res.render('viewpost', {currentUser: req.user, posts: posts});
        }
    });
});

此外,我需要除的loggedIn用户显示其他用户的职位细节。这将是非常有益的,如果你能提供相同的适当方法。

回答如下:

申请之前请检查MongoDB的版本,

router.get('/view', ensureAuthenticated,  async(req, res, next) => {
  try {
    const posts = await Post.aggregate([
      { 
       $match: { userId: { $ne: req.user._id }}
      },
      {
        $lookup: {
          from: "users",
          localField: "userId",
          foreignField: "_id",
          as: "user"
        }
      },{
        $project: {
          postimage: "$postimage",
          user: { $arrayElemAt: ["$user", 0] }
        }
      }
    ])
   res.render('viewpost', {currentUser: req.user, posts: posts, error: ''});
  } catch(error) {
    res.render('viewpost', { currentUser: req.user, posts: [], error: error});
  }
})

如果找不到任何结果请req.user._id作为的ObjectId使用mongoose.Types.ObjectId(req.user._id)

请参阅使用猫鼬后收集用户数据

我创建的登录和注册页面和用户数据被存储用户收藏。也做了功能添加和查看由用户的loggedIn创建新的岗位。所以每当一个用户创建的帖子,我需要收集后在指用户数据(用户名)。我已经检查了一些论坛,但无法理解填入方法。我需要知道在架构引用的数据以及如何从用户采集获取的数据,并收集后在使用它。

这里是用户模型

var UserSchema = new mongoose.Schema({
    username: {
        type: String,
        index: true
    },
    password: {
        type: String
    }, 
    email: {
        type: String
    },
    name: {
        type: String
    },
    profileimage: {
        type: String
    },
    uposts: [{ type: Schema.Types.ObjectId, ref: 'Post'}]
});

var User = module.exports = mongoose.model('User', UserSchema);

这里是邮政型号

var PostSchema = new mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    postimage: {
        type: String
    },
    author: {
            type: Schema.Types.ObjectId,
            ref: "User"
        // username: String
    },

});

var Post = module.exports = mongoose.model('Post', PostSchema);

路线为增加新的岗位

router.post('/add', upload.single('postimage'), (req, res, next) => {
    if(req.file) {
        console.log('Uploading File..');
        var postimage = req.file.filename;
        } else {
        console.log('No File Uploaded');
        var postimage = 'noimage.jpg';
    }

    var newPost = new Post({
        postimage: postimage
      });

      Post.createPost(newPost, (err, post) => {
        if(err) throw err;
         console.log(post);
      });

  req.flash('success', 'Successfully Created Posts');

  res.location('/');
  res.redirect('/');

});

路由器显示的帖子

router.get('/view', ensureAuthenticated,  (req, res, next) => {
    // res.render('viewpost', { user: req.user });
    Post.find({_id: {$ne: req.user._id}}, (err, posts) => {
        if(err) {
          console.log(err);
        } else {
          res.render('viewpost', {currentUser: req.user, posts: posts});
        }
    });
});

此外,我需要除的loggedIn用户显示其他用户的职位细节。这将是非常有益的,如果你能提供相同的适当方法。

回答如下:

申请之前请检查MongoDB的版本,

router.get('/view', ensureAuthenticated,  async(req, res, next) => {
  try {
    const posts = await Post.aggregate([
      { 
       $match: { userId: { $ne: req.user._id }}
      },
      {
        $lookup: {
          from: "users",
          localField: "userId",
          foreignField: "_id",
          as: "user"
        }
      },{
        $project: {
          postimage: "$postimage",
          user: { $arrayElemAt: ["$user", 0] }
        }
      }
    ])
   res.render('viewpost', {currentUser: req.user, posts: posts, error: ''});
  } catch(error) {
    res.render('viewpost', { currentUser: req.user, posts: [], error: error});
  }
})

如果找不到任何结果请req.user._id作为的ObjectId使用mongoose.Types.ObjectId(req.user._id)

发布评论

评论列表 (0)

  1. 暂无评论