나는 MongoDB 우리의 웹 서버 로그를 저장하고 스키마는 다음과 유사합니다
[
{
"_id" : 12345,
"url" : "http://www.mydomain.com/xyz/abc.html",
....
},
....
]
내가 전달을 시작하기 전에이 스키마를 조금 바꿀하기 위해 $project
연산자를 사용하는 것을 시도하고있다 집계 파이프 라인을 통한 나의 수집. 기본적으로 group-by를 수행하는 데 사용되는 "type"이라는 새 필드를 추가해야합니다. 새로운 분야의 논리는 매우 간단합니다. (사용자 정의 JS 함수에 "keyf"속성을 설정하여
db.weblog.aggregate(
{
$project : {
type : { /* how to implement the logic??? */ }
}
}
);
내가지도-감소하여이 작업을 수행하는 방법을 알고
if "url" contains "pattern_A" then set "type" = "sales lead";
else if "url" contains "pattern_B" then set "type" = "existing client";
...
나는 이런 식으로 뭔가 할 것입니다 생각하고 있어요 위의 논리를 구현하지만) 이제는 new aggregation framework을 사용하여이 작업을 수행하려고합니다. expression operators을 사용하여 로직을 구현하려고했지만 지금까지 작동시키지 못했습니다. 어떤 도움이나 제안이라도 대단히 감사하겠습니다!
감사합니다. 당신의 제안은 제가 시도한 첫 번째 시도 였고, 지원되는 문자열 연산자를 사용하여 문자열 패턴의 존재를 검사 할 수 없다는 것을 깨달았을 때 막 다른 골목을 빨리 쳤습니다.url의 특정 패턴을 찾기 위해 indexOf()와 같은 것이 필요하다. – Edenbauer
하위 문자열은 "url"에서 어디에 나타날 수 있습니까? 문서를 처음 작성한 시점에 저장할 수있는 것이 있습니까? –
나는 비슷한 상황에 처해있다. 나는 두 개의 필드 A와 B를 가지고 있으며 문서에있는 필드는 상호 배타적입니다. A가있을 때 A로 그룹화하고 B가있을 때 B로 그룹화해야하지만 $ 프로젝트에 $ cond를 가질 수없는 것처럼 보입니다. $ 프로젝트를 두 가지 방법으로 작성했습니다 : {$ project : {MyKey {$ cond : [{$ condates : {$ condates : {$ condates : {$ { "errmsg": "예외 : 연산자 '$ exists'이 (가) 잘못되었습니다.", {$ exists "true}},"$ A ","$ B "]}}} 계속 오류가 발생합니다. "code": 15999, "ok": 0 } ... 아마도 그것은 단지 성가신 구문 일뿐입니다. ( –