【发布时间】:2021-12-17 20:45:53
【问题描述】:
我正在学习 NodeJS 和 Mongo Db,但我陷入了困境。如果您知道解决方案,您能帮帮我吗?
我有 2 个问题
1.)我在 mongo db 中有 2 个集合 我试图找出用户有哪些项目。例如 michaela 有项目 :nodejs, test2 jasmin 有项目:test2(我不想知道谁是当前项目的编码人员,但我想知道当前用户的项目是什么)
我想要得到的数据应该是这样的
[{
id: "some value"
username: "michaela"
email:"some value"
password:"some value"
projects:"[{
project_name:"node js"
project_description:"learn node js"
deadline:"2021-11-12"
status:"todo"
},
{
project_name:"test2"
project_description:"learn node js"
deadline:"2021-11-12"
status:"todo"
}]
},
id: "some value"
username: jasmin"
email:"some value"
password:"some value"
projects:"[
{
project_name:"test2"
project_description:"learn node js"
deadline:"2021-11-12"
status:"todo"
}]
}]
我不完全了解查找的工作原理。我尝试了以下示例(测试),但它不起作用
我也不明白如何连接 2 个数据库,例如 allMembers 和我合并到一个数组中的所有项目,但我认为这不是正确的方法。
这是我的模特
const usersCollection = require('../db').db().collection("users")
const projectsCollection = require('../db').db().collection("projects")
Team.prototype.getAllMembers = function(){
return new Promise (async (resolve, reject) => {
try{
let allMembers = await usersCollection.find({}).toArray()
let allprojects = await projectsCollection.find({}).toArray()
let test = await usersCollection.aggregate([
{$lookup: {from: "projects", localField: "username", foreignField: "coder", as: "projects"}},
{$project: {
username:1,
projects:{
name:{$arrayElemAt: ["$projects.project_name", 0]},
description:{$arrayElemAt: ["$projects.project_description", 0]},
},
email:1,
password:1,
}}
]).toArray()
console.log("test", test)
let arr3 = [...allMembers, ...allprojects]
resolve(arr3)
}catch{
reject()
}
})
}
这是我的控制器
exports.home = function(req, res) {
//when user is log in
if (req.session.user) {
let teamMember = new Team(req.body)
teamMember.getAllMembers().then((data)=>{
console.log("members data", data)
if(data){
res.render('members', {data: data })
}else{
res.send("on this page are no data")
}
}).catch((err)=>{
res.send("problem")
})
//when user is not log in, flash tie errory z db automaticky vymaze po pouziti
} else {
res.render('login', {errors: req.flash('errors'), regErrors: req.flash('regErrors')})
}
}
这就是它在 db 中的样子
提前谢谢你
【问题讨论】:
标签: node.js database mongodb lookup