MongoDB에서 배열을 푸시하는 방법
MongoDB에서 배열에 값을 추가하려면 $push 연산자를 사용하면 됩니다. $push는 주로 update 작업에서 배열 필드에 새로운 요소를 추가할 때 사용되지만, 집계(aggregation) 파이프라인의 $group 단계와 함께 사용하면 여러 문서에 흩어져 있는 데이터를 하나의 배열로 모을 수도 있습니다.
먼저 컬렉션을 생성하고 문서를 삽입해 보겠습니다.
> db.demo399.insertOne({Name:"Chris",Age:21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e610339fac4d418a017856d")
}
> db.demo399.insertOne({Name:"David",Age:22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e610341fac4d418a017856e")
}
> db.demo399.insertOne({Name:"Chris",Age:21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e610355fac4d418a017856f")
}
> db.demo399.insertOne({Name:"Bob",Age:23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e61035efac4d418a0178570")
}
> db.demo399.insertOne({Name:"David",Age:22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e610364fac4d418a0178571")
}find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.
> db.demo399.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e610339fac4d418a017856d"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e610341fac4d418a017856e"), "Name" : "David", "Age" : 22 }
{ "_id" : ObjectId("5e610355fac4d418a017856f"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e61035efac4d418a0178570"), "Name" : "Bob", "Age" : 23 }
{ "_id" : ObjectId("5e610364fac4d418a0178571"), "Name" : "David", "Age" : 22 }$push를 사용해 배열을 만드는 쿼리
다음은 배열을 푸시하는 쿼리입니다. $group 단계에서 _id를 null로 지정하면 모든 문서가 하나의 그룹으로 묶이고, $push를 통해 각 문서의 Name과 Age 값이 배열 요소로 순서대로 추가됩니다.
> db.demo399.aggregate(
... [
... {
... $group:
... {
... _id: null,
... array: { $push: { Name: "$Name", Age: "$Age" } }
... }
... }
... ]
... )
위 집계 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : null, "array" : [ { "Name" : "Chris", "Age" : 21 }, { "Name" : "David", "Age" : 22 }, { "Name" : "Chris", "Age" : 21 }, { "Name" : "Bob", "Age" : 23 }, { "Name" : "David", "Age" : 22 } ] }참고: $push와 $addToSet의 차이점
$push는 중복 값을 허용하며 항상 배열의 끝에 새 요소를 추가합니다. 반면 $addToSet은 배열에 이미 존재하는 값은 추가하지 않습니다. 따라서 중복 없이 고유한 값만 배열에 담고 싶다면 $addToSet을 사용하는 것이 좋습니다.