[MONGODB] 어떻게 MongoDB를 수집 내부 문서에 포함 된 특정을 얻으려면? [복제]
MONGODB어떻게 MongoDB를 수집 내부 문서에 포함 된 특정을 얻으려면? [복제]
나는 기록이라는 배열 문서를 포함하고있다 컬렉션 노트북이있다. 샘플
아래 그림과 같이 같은 문서 보인다.
{
"_id" : ObjectId("4f7ee46e08403d063ab0b4f9"),
"name" : "MongoDB",
"notes" : [
{
"title" : "Hello MongoDB",
"content" : "Hello MongoDB"
},
{
"title" : "ReplicaSet MongoDB",
"content" : "ReplicaSet MongoDB"
}
]
}
나는 제목에 "Hello MongoDB를"가 단지 참고를 찾고 싶어요. 나는 무엇을해야 못하고 있어요
쿼리합니다. 캔 사람의 도움 나.
해결법
-
==============================
1.오래된 대답 : 다른 답변을 참조하십시오.
오래된 대답 : 다른 답변을 참조하십시오.
나는 적어도 몇 가지 않고, 가능하다 당신이 요구하는 것을 생각하지 않는다 어쩌면지도-감소?
여기를 참조하십시오 : MongoDB의에서 필터링 포함 된 문서를
그 대답은 당신이 데이터로 작업 할 방법을 더 벌로, 스키마를 변경 제안합니다.
당신은 일치 "노트 제목을"이 올바른 문서를 다시 얻을 수있는 중 "점 표기법"또는 $ elemMatch을 사용할 수 있습니다 ...
> db.collection.find({ "notes.title" : "Hello MongoDB"}, { "notes.title" : 1"});
또는 ...
> db.collection.find({ "notes" : { "$elemMatch" : { "title" : "Hello MongoDB"} }});
하지만 당신은 전체 배열, 경기의 원인이 아니라 배열 요소를 다시 얻을 것이다.
또한, 뭔가가 배열의 항목에 어떤 작업을 할 어려울 것이다 대해 ... 당신의 현재 설정과 생각합니다.
(링크 대답에서 알 수 있듯이) 당신이 당신의 스키마를 변경하지 않으면 ... 나는 당신이 일을 필요한 경우 쉽게 삭제할 좋아 할 수 있도록 배열의 각 요소에 "ID를"추가하는 것을 고려한다.
-
==============================
2.당신은 더 높은 몽고 버전 2.2이 작업을 수행 할 수 있습니다
당신은 더 높은 몽고 버전 2.2이 작업을 수행 할 수 있습니다
이 같은 질의 :
db.coll.find({ 'notes.title': 'Hello MongoDB' }, {'notes.$': 1});
당신은 저스틴 젠킨스와 같은 $ elemMatch으로 시도 할 수 있습니다
-
==============================
3.당신은 MongoDB의 버전에서이 작업을 수행 할 수 있습니다 3.2 이상 집계에.
당신은 MongoDB의 버전에서이 작업을 수행 할 수 있습니다 3.2 이상 집계에.
질문:
db.Notebook.aggregate( { $project: { "notes": { $filter: { input: "$notes", as: "note", cond: { $eq: [ "$$note.title", "Hello MongoDB" ] } } } } } )
결과:
{ "_id" : ObjectId("4f7ee46e08403d063ab0b4f9"), "notes" : [ { "title" : "Hello MongoDB", "content" : "Hello MongoDB" } ] }
$$ 변수에 액세스하는 데 여기에 사용. 나는 $ 필터 내부에 새로 생성 된 노트 변수에 액세스하려면 여기를 사용했다.
당신은 $ 필터, $ EQ와 $$에 대한 공식 문서에서 자세한 내용을 찾을 수 있습니다.
노트 :
저스틴 Jenkin의 대답은 오래된되고 여기 KOP의 대답은 컬렉션에서 여러 문서를 반환하지 않습니다. 필요한 경우이 집계 쿼리를 사용하면 여러 문서를 반환 할 수 있습니다.
나는이 필요하고 도움이 누군가에 게시하고 싶었다.
-
==============================
4.당신은 $ 또는 $ elemMatch를 사용할 수 있습니다. 오퍼레이터 $ 및 $ elemMatch 연산자 조건에 따라 배열의 요소의 서브셋을 투영.
당신은 $ 또는 $ elemMatch를 사용할 수 있습니다. 오퍼레이터 $ 및 $ elemMatch 연산자 조건에 따라 배열의 요소의 서브셋을 투영.
$ elemMatch 투영 오퍼레이터는 명시 적 조건 인수를. 이것은 당신이하지 쿼리의 조건에 따라 투사 할 수 있습니다.
db.collection.find( { // <expression> }, { notes: { $elemMatch: { title: 'Hello MongoDB' } }, name: 1 } )
은 $ 연산자는 쿼리 문에서 일부 조건에 따라 배열의 요소를 투영합니다.
db.collection.find( { 'notes.title': 'Hello MongoDB' }, { 'notes.title.$': 1, name: 1 } )
-
==============================
5.이 같은 쿼리를 수행 할 수 있습니다 :
이 같은 쿼리를 수행 할 수 있습니다 :
db.coll.find({ 'notes.title': 'Hello MongoDB' });
또한 자세한 내용은 문서를 참조 할 수 있습니다.
from https://stackoverflow.com/questions/10043965/how-to-get-a-specific-embedded-document-inside-a-mongodb-collection by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽구스 스키마 모델에 등록되지 않은 (0) | 2019.12.11 |
---|---|
[MONGODB] MongoDB의 배열에서의 n 번째 원소를 받기 (0) | 2019.12.11 |
[MONGODB] 참조 된 모델의 필드에 의해 모델에 중첩 된 쿼리를 몽구스 (0) | 2019.12.11 |
[MONGODB] MongoDB의 많은 관계로 많은을 구성하는 방법 (0) | 2019.12.11 |
[MONGODB] 합니까 몽구스는 MongoDB를`findAndModify` 방법을 지원합니까? (0) | 2019.12.11 |