[MONGODB] 같은 문서의 필드 MongoDB의 쿼리
MONGODB같은 문서의 필드 MongoDB의 쿼리
나는 다음 JSON이있다.
{
"a1": {"a": "b"},
"a2": {"a": "c"}
}
내가 원하는 모든 서류를 요청할 경우 같은 문서에서 A1 같지 A2.
어떻게 그것을 할 수 있습니까?
해결법
-
==============================
1.당신은 $ 어디에 사용할 수 있습니다 :
당신은 $ 어디에 사용할 수 있습니다 :
db.myCollection.find( { $where: "this.a1.a != this.a2.a" } )
이 자바 스크립트 엔진을 회전하고 각각의 모든 문서를 반복하고 각각의 상태를 확인해야합니다 때문에,이 매우 빠른 수 없다는 점에 유의하십시오.
당신은 큰 컬렉션이 쿼리를 수행해야하는 경우, 또는 매우 자주, 그것은 areEqual처럼 비정규 플래그를 소개하는 것이 가장 좋습니다. 그는 후보 세트가 여전히 크기 때문에 여전히 낮은 선택성 필드, 좋은 인덱스 성능을 얻을 수 없습니다.
-
==============================
2.자바 스크립트가 집계 프레임 워크를 사용하지 않도록하려면 :
자바 스크립트가 집계 프레임 워크를 사용하지 않도록하려면 :
db.myCollection.aggregate([ {"$match":{"a1":{"$exists":true},"a2":{"$exists":true}}}, {"$project": { "a1":1, "a2":1, "aCmp": {"$cmp":["$a1.a","$a2.a"]} } }, {"$match":{"aCmp":0}} ])
우리의 개발 서버에 해당하는 자바 스크립트 쿼리를 완료하는 데 7 배 더 오래 걸립니다.
난 그냥 내 대답은 동일하지 값을 원하는 질문 (때로는 정말 천천히 해요)을 대답하지 않았다 깨달았다. 이것은 그것을 위해 작동합니다 :
db.myCollection.aggregate([ {"$match":{"a1":{"$exists":true},"a2":{"$exists":true}}}, {"$project": { "a1":1, "a2":1, "aEq": {"$eq":["$a1.a","$a2.a"]} } }, {"$match":{"aEq": false}} ])
경기 조건이 true로 변경된 경우 $ NE는 $ EQ 대신에 사용될 수 있지만, 좀 더 직관적으로 거짓과 $ EQ를 사용하여 찾을 수 있습니다.
-
==============================
3.몽고 3.6으로 사용할 수있는 새 $의 EXPR 연산자를 사용하면이 같은 찾기 쿼리에 집계 식을 사용할 수 있습니다 :
몽고 3.6으로 사용할 수있는 새 $의 EXPR 연산자를 사용하면이 같은 찾기 쿼리에 집계 식을 사용할 수 있습니다 :
db.myCollection.find({$expr: {$ne: ["$a1.a", "$a2.a"] } });
이 댓글 해결할 수있는 문제 문제가 있지만, 나는이 사용 사례에 대한 더 나은 경기를 버전 3.4 대신 $ 프로젝트로 사용할 수 $ addFields 연산자를 사용하는 것입니다 생각합니다.
db.myCollection.aggregate([ {"$match":{"a1":{"$exists":true},"a2":{"$exists":true}}}, {"$addFields": { "aEq": {"$eq":["$a1.a","$a2.a"]} } }, {"$match":{"aEq": false}} ]);
-
==============================
4.MongoDB를 이렇게 백그라운드에서 자바 스크립트를 사용하여
MongoDB를 이렇게 백그라운드에서 자바 스크립트를 사용하여
{"a": "b"} == {"a": "b"}
거짓 일 것이다.
그래서 것 가지고 a1.a == a2.a 각각 비교
MongoDB의에서이 작업을 수행하려면 어디 연산자 $를 사용합니다
db.myCollection.find({$where: "this.a1.a != this.a2.a"});
이것은 각 포함 된 문서 속성 "A"를 가지고 있다고 가정. 그런 경우가 아닌 경우 상황이 더 복잡해진다.
-
==============================
5.내 모든 문제를 해결하기위한 감사합니다 - 사용 집계는 (), 처음에 저를 혼동 한 가지 $ EQ (또는 $, 또는 다른 사업자의 많은)가 사용되는 위치에 따라 다른 의미를 가지고 있다는 답변에 관하여. 찾은 내용 () 또는 응집 $ 정합 단계에서 $ 당량은 단일 값, 및 문서를 매칭 선택을 취
내 모든 문제를 해결하기위한 감사합니다 - 사용 집계는 (), 처음에 저를 혼동 한 가지 $ EQ (또는 $, 또는 다른 사업자의 많은)가 사용되는 위치에 따라 다른 의미를 가지고 있다는 답변에 관하여. 찾은 내용 () 또는 응집 $ 정합 단계에서 $ 당량은 단일 값, 및 문서를 매칭 선택을 취
db.items.aggregate([{$match: {_id: {$eq: ObjectId("5be5feb45da16064c88e23d4")}}}])
그러나 통합의 $ 프로젝트 단계에서, $ 당량이 표현의 배열을 받아, 진정한 가치 또는 false로 새 필드를합니다 :
db.items.aggregate([{$project: {new_field: {$eq: ["$_id", "$foreignID"]}}}])
통과에서, 여기에 그 목록에 링크 된 항목 (버그로 인해) 그 자체에 연결된 모든 항목을 찾을 수 내 프로젝트에 사용 된 쿼리 I는 다음과 같습니다
db.items.aggregate([{$project: {idIn: {$in: ["$_id","$header.links"]}, "header.links": 1}}, {$match: {idIn: true}}])
from https://stackoverflow.com/questions/8433046/mongodb-query-with-fields-in-the-same-documents by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] GridFS없이 NodeJS에서 MongoDB를 가진 파일 (1메가바이트에서) 몇 가지 작은 저장 (0) | 2019.12.29 |
---|---|
[MONGODB] MongoDB를 BSON 코덱 부호화 대상 동안 사용되지 (0) | 2019.12.29 |
[MONGODB] MongoDB의 합계 쿼리 (0) | 2019.12.29 |
[MONGODB] MongoDB를 데이터베이스 연결을 개방 유지 (0) | 2019.12.29 |
[MONGODB] MongoDB를 문자열로 열거 형을 저장 (0) | 2019.12.29 |