请参阅使用猫鼬后收集用户数据
我创建的登录和注册页面和用户数据被存储用户收藏。也做了功能添加和查看由用户的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)