나는 아래에서 성취하고자하는 것이 MongoDB Aggregation Framework로 수행 될 수 있는지에 대해 누군가가 대답 할 수 있기를 희망한다.
1 백만 건에 가까운 문서로 다음과 유사한 사용자 데이터 구조가 있습니다.
{
"firstName" : "John",
"lastName" : "Doe",
"state" : "NJ",
"email" : "[email protected]"
"source" : [
{
"type" : "SOURCE-A",
"data" : {
"info" : "abc",
"info2" : "xyz"
}
},
{
"type" : "SOURCE-B",
"data" : {
"info3" : "abc"
}
}
]
}
다른 시스템에 데이터를 제공하려면 이전 데이터 세트의 제한된 정보로 플랫 파일 구조를 생성해야합니다.
firstname, lastname, email, is_source-a, is_source-b
나는 "is_source-A"와 "is_source-B"를 채우기 위해 시도하는 조건 코드입니다 어려움에 봉착 부분을 : 열은 표현해야합니다. 다음 집계 쿼리를 사용하려고 시도했지만 $ COND와 함께 사용되는 $ EQ 연산자가 배열 내부의 데이터를 평가하는 것처럼 보이지 않으므로 (항상 false) 작동하는 방법을 알아낼 수 없습니다.
db.collection.aggregate([
{
$project : {
_id : 0,
firstName : 1,
lastName: 1,
"is_source-a" : {
$cond : [
{ $eq: [ "$source.type", "source-a" ] },
1,
0
]
},
"is_source-b" : {
$cond : [
{ $eq: [ "$source.type", "source-b" ] },
1,
0
]
}
}
}
]);
내가 먼저 배열을 UNWIND $ 수 있지만, 나는 각 사용자 문서의 여러 레코드와 바람과 다시 통합하는 방법을 이해하지 않습니다.
개체 배열을 처리 할 때 $ COND와 함께 $ EQ (또는 다른 연산자)를 사용하는 방법이 있습니까?
이 정확히 내가 그것을 필요로하는 방식으로 작동하지만, $ GROUP 문에서 $ FIRST 및 $ MAX를 (를) 사용하는 것을 이해하려고합니다. NULL 값의 상황을 방지하기위한 해결 방법이 있습니까? –
@ Joe-IV 좋아요. $ 그룹에서 진행중인 작업에 대한 자세한 내용은 업데이트 된 답변을 참조하십시오. – JohnnyHK
완벽한! -이 답변과 함께, 나는이 [블로그 게시물] (http://www.davenewson.com/dev/conditional-aggregation-on-arrays-of-objects-in-mongodb)이 함께 조각을 넣는 데 유용하다는 것을 알았습니다 내 머리에. –