$exists가 $cond 내에 있는 조건부 그룹화
나는 A와 B의 두 개의 키를 가지고 있으며, 그 두 키는 서로 배타적이다.A가 있을 때는 A로, B가 있을 때는 B로 그룹화해야 합니다.그래서 나는$project
필요한 값을 MyKey라고 하는 컴퓨터 키에 입력해, 이 키에 필요한 값을 입력합니다.$group
하지만 구문을 잘못 알고 있는 것 같습니다.$프로젝트를 두 가지 방법으로 작성하려고 했습니다.
{$project: {MyKey: {$cond: [{$exists: ["$A", true]}, "$A", "$B"]}}}
그리고.
{$project: {MyKey: {$cond: [{"A": {$exists:true}}, "$A", "$B"]}}}
하지만 계속 오류가 발생합니다.
{ "errmsg" : "exception: invalid operator '$exists'", "code" : 15999, "ok" : 0 } ...
뭐가 잘못됐어?
대신 사용$cond
당신의 안에서$project
:
{ $project: {MyKey: {$ifNull: ['$A', '$B'] }}}
한다면A
존재하는지 여부null
그 값이 사용됩니다.그렇지 않으면, 그 값은B
사용됩니다.
$cond로 $120을 체크하고 싶다면 $cond로 체크하지 말고 $cond로 체크하는 것이 대체 방법입니다.
{$project: {MyKey: {$cond: [{$not: ["$A"]}, "$B", "$A"]}}}
$not에 대한 진실 표는 다음과 같습니다.
도움이 되는 희망
다음과 같은 방법으로 존재 여부를 시뮬레이션할 수 있습니다.
$ne : [$var_to_check, undefined]
var가 정의되어 있으면 true가 반환됩니다.
$cond 및 체크에서 찾은 공유가 있습니다.
$cond: {
if: "$A1",
then: "$A1",
else: "$B1"
}
비슷한 문제를 찾다가 당신의 질문을 발견했는데, 키를 꽂고 파라미터를 찾고 있었습니다.나는 마침내 그 문제를 해결했다.
이것은 $_id.status 파라미터에 사용한 것입니다.이 파라미터는 조건 내에 존재하는지 확인하기 위해서입니다.
$cond: [{
$or: [{
$ne: ["$_id.status", null]
}]
}, 1, null]
또는 $는 필요 없습니다.내가 보관하고 있어...그냥 재미로.현재로선 질의에 큰 영향을 주지 않는 것 같습니다.나중에 속도 테스트를 하겠습니다.
TL;DR:
기대했던 것과 완전히 동등한 것{ k: { $exists: true } }
집합적으로 또는$expr
다음 방법으로 스테이트먼트를 실행할 수 있습니다.{ $or: ['$k', { $in: ['$k', [null, 0, false]] }] }
설명:
필드 값과의 비교null
사용.$eq
또는$in
는 엄격하며 필드가 설정되지 않으면 false를 반환합니다.
이에 대한 진실 표는 다음과 같습니다.
| null | unset | truthy | falsy |
------------------------+-------+-------+--------+-------+
{ $eq: ['$k', null] } | TRUE | FALSE | FALSE | FALSE |
{ $in: ['$k', [null]] } | TRUE | FALSE | FALSE | FALSE |
따라서 필드가 언제 설정되었는지 알기 위해서는 테이블의 truthy 열과 false 열을 다음과 같이 전환해야 합니다.true
.
단조로운 값은... 단조롭기 때문에 그대로 사용할 수 있습니다.{ $or: ['$k', { $eq: ['$k', null] }] }
MongoDB에서 false 값은 다음과 같습니다.0
,false
그리고.null
그래서 우리는 잃어버린 것들을 우리 회사에 추가할 수중에 넣을 수 있습니다.$in
절:{ $in: ['$k', [null, 0, false]] }
이것들을 합치면, 우리는 다음을 얻을 수 있다.{ $or: ['$k', { $in: ['$k', [null, 0, false]] }] }
이제 돌아올 것이다.true
만약 필드가 진부하거나,0
,false
또는null
그리고.false
설정되지 않은 경우.
언급URL : https://stackoverflow.com/questions/14213636/conditional-grouping-with-exists-inside-cond
'programing' 카테고리의 다른 글
woocommerce 함수로 작성된 함수를 덮어쓰려고 합니다.php 파일 (0) | 2023.03.18 |
---|---|
단일 스프링 부트 테스트 속성 재정의 (0) | 2023.03.18 |
Javascript 객체 푸시() 함수 (0) | 2023.03.18 |
jQuery grep()를 사용한 JSON 배열 필터링 (0) | 2023.03.18 |
Wordpress가 웹 루트에 설치되어 있는 하위 디렉토리에서 Joomla 웹 사이트를 실행하는 방법 (0) | 2023.03.18 |