如何在MongoDB中添加到此集合

时间:2018-08-22 16:15:27

标签: javascript node.js mongodb

因此,我有一个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));
    })

2 个答案:

答案 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.0employee.1的原因,因此如果您有一个员工属性作为对象,您可以简单地忽略01

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/