2011-03-14 4 views
29

나는 몽고 (mongo) db를 시도하고 있으며 문서의 특정 부분 만 얻을 수 있는지 묻고 싶습니다.몽고 (Mongodb)가 문서의 특정 부분을 가져옴

{ 
    "name" : "MongoDB", 
    "info" : { 
       x : 203, 
       y : 102 
      } 
} 

은 내가 info의 내용 만합니다.

내가 찾은 가장 가까운 것은 db.cellection.find({},{info:1 })이지만이 정보가 나와 정보를 반환합니다 : 콘텐츠 만 반환하고 싶습니다.

가능합니까? 방법?

+0

을 선택하고 난 단지 특정 필드 후입니다. 아니, 하나의 문서 (+ 10k 필드)에 여러 필드를 저장할 때 별도의 테이블에 특정 필드를 저장할 수 없습니다 –

답변

26

당신은

db.collection.find({},{'info.x':1, 'info.y':1}) 

을 할 수 있지만 각과 투영 정보 객체의 모든 항목을 나열 의미 - 어떤 수도 있고 당신이 찾고있는 무엇을하지 않을 수 있습니다.

11

아니요, x/y에 대한 값만 반환 할 수 없습니다. 필드를 제한하더라도 외부 구조는 여전히 반환됩니다.

자세한 내용은 을 참조하십시오. 당신이 찾기를 더 투사를 지정하지 않으면

db.collection.distinct("info", {info : {$exists : true}}) 
13

당신은에 따라 유사 distinct() 기능을 사용할 수 있습니다 쿼리와 일치하는 모든 문서

+2

왜 이것이 0에 있었는지 아십니까? 최상위 2 번은 포스터가 원하는 일이 불가능하다는 것을 암시하는 반면, 정확한 답처럼 들립니다. – michaelAdam

+0

"distinct"키워드를 가지고 있지만, mysql이하는 것과는 다른 아이템을 선택하지 않고, 당신이 제공하는 "distinct"필드만을 선택합니다. 그래서이 대답은 실제로 다른 두 개의 답보다 훨씬 나은 결과를 만들어냅니다. – WallTearer

1

MongoDb docs

이 방법의 모든 필드를 반환()이이

을 읽어

0

당신은 aggregation framework을 사용할 수 있습니다 (옵션)

  1. $ 일치하는 단계를 결과를 필터링 할 수 있습니다.
  2. $ 프로젝트 단계는 내 문서의 크기가 5메가바이트을 +대로 나는 또한이 솔루션에 관심이 필드

    db.getCollection('yourCollection').aggregate([ {$match:{_id:ObjectId("566fc97f5b79dff1a73ca2ae")}}, {$project:{_id:0, "x":"$info.x", "y":"$info.y"}} ])

관련 문제