Javascript 如何在MongoDB中添加到此集合
所以我有一个EmployeeSchema,它接收一个用户和一组员工。每个员工都有一封电子邮件、姓名、职务和一个问答数组。我希望能够添加到questionandanswer数组,但我不知道如何使用user.id和employee.email或employee.id查找集合。比如说,我想找到matt@concur.com并添加到问答数组中Javascript 如何在MongoDB中添加到此集合,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,所以我有一个EmployeeSchema,它接收一个用户和一组员工。每个员工都有一封电子邮件、姓名、职务和一个问答数组。我希望能够添加到questionandanswer数组,但我不知道如何使用user.id和employee.email或employee.id查找集合。比如说,我想找到matt@concur.com并添加到问答数组中 { "_id": { "$oid": "5b7bb55197243619089d5a2f" }, "user": { "$oid": "5b7ae
{
"_id": {
"$oid": "5b7bb55197243619089d5a2f"
},
"user": {
"$oid": "5b7aeb3cf0861f453c279910"
},
"employee": [
{
"_id": {
"$oid": "5b7bb8893b55b9192cd84f58"
},
"email": "matt@concur.com",
"name": "Matt J",
"jobtitle": "HR Manager",
"questionandanswer": []
},
{
"questionandanswer": [],
"_id": {
"$oid": "5b7bb5db3b55b9192cd84f57"
},
"email": "john@concur.com",
"name": "John Doe",
"jobtitle": "Software Engineer"
}
],
"__v": 2
}
这就是我的AddEmployee现在的样子:
const employeeFields = {};
employeeFields.user = req.user.id;
if (req.body.email) employeeFields.email = req.body.email;
if (req.body.name) employeeFields.name = req.body.name;
if (req.body.jobtitle) employeeFields.jobtitle = req.body.jobtitle;
Employee
.findOne({
user: req.user.id
})
.then(employee => {
employee.employee.unshift(employeeFields);
employee.save().then(employee => res.json(employee));
//new Employee(employeeFields).save().then(employee => res.json(employee));
})
您可以使用以下查询语法从employee数组中查找employee
db.Employee.findOne({ user.$oid : req.user.id, "employee" : { $elemMatch :{ email: req.body.email } } }, function(err, employee) {
employee.questionandanswer.push(" your question and answer object from request ");
employee.save();
});
试试这个,让我知道它是否有效。根据您在问题中提到的内容,如果我理解错误,请纠正我。您正在尝试根据请求正文中的内容筛选数据: 从性能的角度来看,当您在一个简单的查询中查找和更新时,它会更好,这就是为什么我在这里使用
findOneAndUpdate
此外,我想强调的是,我注意到您将employee
定义为array
,这就是我使用employee.0
或employee.1
的原因,因此如果您将employee属性作为对象,您可以忽略0
和1
let employeeFields = {};
employeeFields["user.$oid"] = req.user.id;
if (req.body.email) employeeFields["employee.0.email"] = req.body.email;
if (req.body.name) employeeFields["employee.0.name"] = req.body.name;
if (req.body.jobtitle) employeeFields["employee.0.jobtitle"] = req.body.jobtitle;
db.Employee.findOneAndUpdate( employeeFields , "$push": { "employee.1.questionandanswer": **your question and answer object**});
看一看,让我知道它是否有效,如果没有请留下评论,以了解您的问题,并能够更好地帮助您
更多帮助:
Raul,看一下MongoDB运营商$elemMatch