복붙노트

[MONGODB] MongoDB의 배열에서 특정 요소를 받기 [중복]

MONGODB

MongoDB의 배열에서 특정 요소를 받기 [중복]

나는 다음과 같은 몽고 컬렉션이

{
  "auther" : "xyz" , 
  "location" : "zzz" , 
  "books" : 
    [
      {"book1" : "b1" , "date" : 2-3-00} ,
      {"book1" : "b2" , "date" : 4-9-00}
    ]
}

{
  "auther" : "pqr",
  "location" : "zzz" , 
  "books" : 
    [
      {"book1" : "b1" , "date" : 2-4-00}
    ]
}

나는 책 B1 및 저자 XYZ의 날짜 만 싶어.

나는 다음과 같은 메이크업 쿼리가

db.coll.find({"auther" : "xyz" , "books.book1" : "b1"} , {"books.date" : 1})

다음과 같이하지만 출력을 제공 있어요

"books" : {"date" : 2-4-00} , "books" : {"date" : 4-9-00}

{ "날짜": 2-4-00} 나는 책 B1 만 "책"다른 XYZ의 .means의 날짜 만 싶어

이 몽고에서 가능하다 아니면 내가 뭔가 잘못하고있는 중이 야?

해결법

  1. ==============================

    1.MongoDB의 쿼리 언어가 일치하는 모든 문서를 반환하도록 설계되었습니다.

    MongoDB의 쿼리 언어가 일치하는 모든 문서를 반환하도록 설계되었습니다.

    단지 하위 문서를 반환하는 지원되지 않습니다.

    이 문제는 MongoDB를의 티켓 추적기 뛰어난 티켓을 가지고있다.

    업데이트 : 고정으로 티켓이 표시되었습니다 것 같습니다.

    이것을 사용하는 방법의 예 여기를 참조하십시오.

  2. ==============================

    2.단지 임시 인라인 콜렉션으로 하위 요소를 방출,지도 축소 /를 사용하여 수행 할 수 있습니다. 그것의 해킹과는 단일 스레드는 내가 /지도로에 대해 조언을 줄 것 그러나 작동하고, 당신이 달성하고자하는 것에 대해 큰 부담을 가지고, 그냥 응용 프로그램의 하위 요소를 추출하는 것이 훨씬 쉽다.

    단지 임시 인라인 콜렉션으로 하위 요소를 방출,지도 축소 /를 사용하여 수행 할 수 있습니다. 그것의 해킹과는 단일 스레드는 내가 /지도로에 대해 조언을 줄 것 그러나 작동하고, 당신이 달성하고자하는 것에 대해 큰 부담을 가지고, 그냥 응용 프로그램의 하위 요소를 추출하는 것이 훨씬 쉽다.

    이 같은...

    지도:

    m = function() { 
        this.books.forEach(function(book){ 
            if(book1 == 'b1'){
               emit("books", {date: book.date,});
             }
         });
    }
    

    줄이다:

    r = function(key, values) {
          return this;
        }
    

    질문:

        db.coll.mapReduce(m, r, {query : {"auther" : "xyz" , "books.book1" : "b1"}, out: { inline : 1}})
    
    
  3. ==============================

    3.만 일치하는 요소를 선택하려는 경우는 다음과 같이 조회 할 수 있습니다.

    만 일치하는 요소를 선택하려는 경우는 다음과 같이 조회 할 수 있습니다.

  4. ==============================

    4.약간의 상상력 (사전 몽고의 V 2.6)와 함께 ...

    약간의 상상력 (사전 몽고의 V 2.6)와 함께 ...

    당신은 총이 작업을 수행하거나 감소 매핑 할 수 있습니다. 집계는 새로운 더 쉽고 최적화되어 있습니다. 여기에 집계 컬렉션은 "저자"라는 가정을 가진 하위 문서를 반환하는 예제입니다. 나는 제대로 맞춤법 사물의 자유를했다.

    Authors.aggregate([
      { $match: { author: 'xyz' } },
      { $unwind: '$books' },
      { 
        $project: {  
          _id: '$books.book1',
          date: '$books.date'
        }
      },
      { $match: { '$_id' : 'b1' } } 
    ]);
    

    당신은 너무 같은 단일 항목 배열을 다시 얻을 것이다 :

    [{ _id: 'b1', date: '2-4-00' }]
    

    그렇지 않으면, 몽고가 2.6+ 당신이 정말 쉬운 방법을 할 수있는 경우 :

    Authors.find({
      author: 'xyz',
      books: { $elemMatch: { book1: 'b1' } }
    },'books')
    

    발견 오직 하나의 레코드 내 경우 어디에서 책 수집을 다시 얻을 것이다 :

    { _id: 'xyz', books: [ { book1: 'b1', date: '2-4-00' } ] }
    
  5. from https://stackoverflow.com/questions/5562485/get-particular-element-from-mongodb-array by cc-by-sa and MIT license