여기서 $push를 사용하여 중첩 배열에 새 문서를 추가할 수 있습니다. 위의 $push 개념을 이해하기 위해 중첩된 배열 문서로 컬렉션을 생성해 보겠습니다. 문서로 컬렉션을 생성하는 쿼리는 다음과 같습니다.
>db.nestedArrayDemo.insertOne({"EmployeeName":"Larry","EmployeeSalary":9000,"EmployeeDetails": [{"EmployeeDOB":new Date('1990-01-21'),"EmployeeDepartment":"ComputerScience","EmployeeProject": [{"Technology":"C","Duration":6},{"Technology":"Java","Duration":7}]}]});
다음은 출력입니다.
{ "acknowledged" : true, "insertedId" : ObjectId("5c6d73090c3d5054b766a76e") }
이제 find() 메서드를 사용하여 컬렉션의 문서를 표시할 수 있습니다. 쿼리는 다음과 같습니다.
> db.nestedArrayDemo.find().pretty();
다음은 출력입니다.
{ "_id" : ObjectId("5c6d73090c3d5054b766a76e"), "EmployeeName" : "Larry", "EmployeeSalary" : 9000, "EmployeeDetails" : [ { "EmployeeDOB" : ISODate("1990-01-21T00:00:00Z"), "EmployeeDepartment" : "ComputerScience", "EmployeeProject" : [ { "Technology" : "C", "Duration" : 6 }, { "Technology" : "Java", "Duration" : 7 } ] } ] }
다음은 새 문서를 추가하기 위한 중첩 배열의 $push 데모입니다. 쿼리는 다음과 같습니다.
>db.nestedArrayDemo.update({"_id":ObjectId("5c6d73090c3d5054b766a76e"), "EmployeeDetails.EmployeeDepartment":"ComputerScience"}, {"$push": {"EmployeeDetails.$.EmployeeProject": {"Technology":"Python", "Duration":4 }}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
위 쿼리에서 {"Technology":"Python", "Duration":4 } 문서를 중첩 배열에 추가했습니다. 이제 컬렉션의 문서를 다시 한 번 표시합니다. 쿼리는 다음과 같습니다.
> db.nestedArrayDemo.find().pretty();
다음은 출력입니다.
{ "_id" : ObjectId("5c6d73090c3d5054b766a76e"), "EmployeeName" : "Larry", "EmployeeSalary" : 9000, "EmployeeDetails" : [ { "EmployeeDOB" : ISODate("1990-01-21T00:00:00Z"), "EmployeeDepartment" : "ComputerScience", "EmployeeProject" : [ { "Technology" : "C", "Duration" : 6 }, { "Technology" : "Java", "Duration" : 7 }, { "Technology" : "Python", "Duration" : 4 } ] } ] }