因此,我有一个EmployeeSchema来接收用户和一组雇员。每位员工将有一封电子邮件,姓名,职位和一个问题和答案数组。我希望能够添加到问题和答案数组中,但是我不知道如何使用user.id和emplyoee.email或employee.id查找集合。例如,假设我想找到matt@concur.com并将其添加到问题和答案数组中。
{
"_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
}
这就是我的新增员工现在的样子:
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));
})
答案 0 :(得分:0)
您可以使用以下查询语法从雇员数组中查找雇员
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();
});
尝试一下,让我知道它是否有效。
答案 1 :(得分:-1)
根据您在问题中提到的内容,如果我误解了,请纠正我。您正在尝试根据请求正文中的内容过滤数据:
从性能的角度来看,最好是在一个简单的查询中进行查找和更新时,这就是为什么在这里使用findOneAndUpdate
此外,我想强调一点,我注意到您将employee
定义为array
,这就是为什么我使用employee.0
或employee.1
的原因,因此如果您有一个员工属性作为对象,您可以简单地忽略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**});
看看,让我知道它是否有效,否则请发表评论以了解您的问题并能够为您提供更好的帮助。
更多帮助: https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/