AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

$mergeObjects (누산기 연산자)

$mergeObjects

여러 문서를 하나의 문서로 결합합니다.

$mergeObjects 이 단계에서 사용할 수 있습니다:

When used as a $bucket, $bucketAuto, or $group stage accumulator, $mergeObjects has this syntax:

{ $mergeObjects: <document> }

When used in other expressions (including in $bucket, $bucketAuto, and $group stages) but not as an accumulator, $mergeObjects has this syntax:

{ $mergeObjects: [ <document1>, <document2>, ... ] }

<document>는 문서로 해석되는 모든 유효한 표현식이 될 수 있습니다.

$mergeObjects ignores null operands. If all the operands to $mergeObjects resolves to null, $mergeObjects returns an empty document { }.

$mergeObjects 는 문서를 병합할 때 필드 값을 덮어씁니다. 병합할 문서에 동일한 필드 이름이 포함된 경우, 결과 문서의 필드에는 해당 필드에 대해 병합된 마지막 문서의 값이 포함됩니다.

예시
결과
{ $mergeObjects: [ { a: 1 }, null ] }
{ a: 1 }
{ $mergeObjects: [ null, null ] }
{ }
{
$mergeObjects: [
{ a: 1 },
{ a: 2, b: 2 },
{ a: 3, c: 3 }
]
}
{ a: 3, b: 2, c: 3 }
{
$mergeObjects: [
{ a: 1 },
{ a: 2, b: 2 },
{ a: 3, b: null, c: 3 }
]
}
{ a: 3, b: null, c: 3 }

다음 문서를 사용하여 컬렉션 orders를 생성합니다.

db.orders.insertMany( [
{ "_id" : 1, "item" : "abc", "price" : 12, "ordered" : 2 },
{ "_id" : 2, "item" : "jkl", "price" : 20, "ordered" : 1 }
] )

다음 문서로 다른 컬렉션 items를 만듭니다.

db.items.insertMany( [
{ "_id" : 1, "item" : "abc", description: "product 1", "instock" : 120 },
{ "_id" : 2, "item" : "def", description: "product 2", "instock" : 80 },
{ "_id" : 3, "item" : "jkl", description: "product 3", "instock" : 60 }
] )

The following operation first uses the $lookup stage to join the two collections by the item fields and then uses $mergeObjects in the $replaceRoot to merge the joined documents from items and orders:

db.orders.aggregate( [
{
$lookup: {
from: "items",
localField: "item", // field in the orders collection
foreignField: "item", // field in the items collection
as: "fromItems"
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: [ "$fromItems", 0 ] }, "$$ROOT" ] } }
},
{ $project: { fromItems: 0 } }
] )

이 작업은 다음 문서를 반환합니다.

{
_id: 1,
item: 'abc',
description: 'product 1',
instock: 120,
price: 12,
ordered: 2
},
{
_id: 2,
item: 'jkl',
description: 'product 3',
instock: 60,
price: 20,
ordered: 1
}

다음 문서를 사용하여 컬렉션 sales를 생성합니다.

db.sales.insertMany( [
{ _id: 1, year: 2017, item: "A", quantity: { "2017Q1": 500, "2017Q2": 500 } },
{ _id: 2, year: 2016, item: "A", quantity: { "2016Q1": 400, "2016Q2": 300, "2016Q3": 0, "2016Q4": 0 } } ,
{ _id: 3, year: 2017, item: "B", quantity: { "2017Q1": 300 } },
{ _id: 4, year: 2016, item: "B", quantity: { "2016Q3": 100, "2016Q4": 250 } }
] )

The following operation uses $mergeObjects as a accumulator in a $group stage that groups documents by the item field:

참고

When used as an accumulator, $mergeObjects operator accepts a single operand.

db.sales.aggregate( [
{ $group: { _id: "$item", mergedSales: { $mergeObjects: "$quantity" } } }
] )

이 작업은 다음 문서를 반환합니다.

{
_id: 'A',
mergedSales: { '2017Q1': 500, '2017Q2': 500, '2016Q1': 400, '2016Q2': 300, '2016Q3': 0, '2016Q4': 0 }
},
{
_id: 'B',
mergedSales: { '2017Q1': 300, '2016Q3': 100, '2016Q4': 250 }
}

참고

병합할 문서에 동일한 필드 이름이 포함된 경우 결과 문서의 필드는 해당 필드에 대해 병합된 마지막 문서의 값을 가집니다.

이 페이지 평가하기

이 페이지의 내용