배열의 마지막 요소를 밀어 :몽고 집계 선택하고 나는 다음과 같은 구조의 문서가
{
...,
trials:[ {...,
ref:[{a:1,b:2},{a:2,b:2},...]
},
{...,
ref:[{a:1,b:2}]
},
...,
]
}
ref
적어도 1
만약의 길이 보장 배열입니다 I 각각의 ref
배열에있는 각 요소의 개별 항목을 계산하려면 다음 집계를 사용합니다.
db.cl.aggregate([
{$unwind:"$trials"},
{$unwind:"$trials.ref"},
{$group:{_id:"$trials.ref", count:{$sum:1}}}
])
가 지금은하지만 각 ref
배열의 마지막 요소, 같은 일을하고 싶어 (이 잘 작동). 집계 파이프 라인에서 각 배열의 마지막 요소 만 선택하는 방법이 필요합니다.
$match
에 위치 연산자를 사용하려고했습니다
db.cl.aggregate([
{$unwind:"$trials"},
{$group:{_id:null,arr:{$push:"$trials.ref.-1"}}},...
])
.
db.cl.aggregate([
{$unwind:"$trials"},
{$match:{"trials.ref.$":-1}},...
])
마지막 요소를 투영하려고합니다.
db.cl.aggregate([
{$unwind:"$trials"},
{$project:{ref:"$trials.ref.1"}}
])
둘 중 어느 것도 나를 데려 오지 않습니다. $pop
연산자가 집계 파이프 라인에서 유효하지 않습니다. $last
연산자는 여기서는별로 유용하지 않습니다.
ref
배열의 마지막 요소 만 사용하는 방법에 대한 아이디어가 있습니까? 차라리 집계 프레임 워크를 유지하고 Map Reduce를 사용하지 않을 것입니다.
당신이 생각하는 것보다 훨씬 어려운 질문입니다. [here] (http : // stackoverflow.com/q/21949521/2313887) –
저는 이것이 흥미로운 질문이라는 것을 완전히 알고 있습니다. 나는 여기에 나의 시도 중 일부만 보여 주었다. 나는 이것에 대해 생각하면서 꽤 많은 시간을 보냈다. 모든'ref' 배열을 질의하고 계산을 로컬로 수행 할 수는 있지만, 그렇지 않을 수도 있습니다. –
내가 직면하고있는 문제가 "상위 n"문제이기 때문에 다른 질문을 참조했습니다. 집계 프레임 워크에서는'$ slice '를 사용할 수 없습니다. 그리고 이것은 당신이하고 싶은 일에 주어진 문제입니다. 그림과 같이'$ first'와'$ match'의 레이어로 에뮬레이트 할 수 있습니다. 그러나 그룹화 당 배열의 "n"결과를 얻는 쉬운 방법은 없습니다. 이것은 기본적으로 당신이 요구하는 것입니다. –