簡體   English   中英

如何在 MongoDB 中添加到此集合

[英]How to add to this collection in MongoDB

所以我有一個 EmployeeSchema ,它接收一個用戶和一組員工。 每個員工都有一個電子郵件、姓名、職位和一個問答數組。 我希望能夠添加到 questionandanswer 數組中,但我不知道如何使用 user.id 和 emplyoee.email 或 employee.id 查找集合。 例如,假設我想找到 matt@concur.com 並添加到 questionandanswer 數組中。

{
"_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));
    })

您可以使用以下查詢語法從員工數組中查找員工

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.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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM