MongoDB 컬렉션의 모든 문서에 대해 단일 필드를 선택하는 방법은 무엇입니까?


223

내 MongoDB를, 나는 10 개 개의 레코드가 필드를 가지고있는 학생 수집이 nameroll. 이 컬렉션의 한 레코드는 다음과 같습니다.

{
    "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
    "name" : "Swati",
    "roll" : "80",
}

다음 roll을 사용하여 기존 데이터베이스에서와 같이 컬렉션의 10 개 레코드 모두에 대해서만 필드를 검색하려고합니다 .

SELECT roll FROM student

나는 많은 블로그를 갔지만 모두 쿼리가 있어야합니다 WHERE. 예를 들면 다음과 같습니다.

db.students.find({ "roll": { $gt: 70 })

쿼리는 다음과 같습니다.

SELECT * FROM student WHERE roll > 70

내 요구 사항은 조건없이 단일 키를 찾는 것입니다. 그래서 그 쿼리 작업은 무엇입니까?


@NeilLunn SQL과 MongoDB 매핑 의 연결에 감사드립니다 . 내가 이것을 어떻게 놓쳤는 지 모르겠다.
Shipra Swati

답변:


255

로부터 MongoDB를 워드 프로세서 :

투영에는 명시 적으로 여러 필드가 포함될 수 있습니다. 다음 작업에서 find () 메서드는 쿼리와 일치하는 모든 문서를 반환합니다. 결과 집합에서 항목 및 수량 필드와 기본적으로 _id 필드 만 일치하는 문서로 반환됩니다.

db.inventory.find ({유형 : 'food'}, {항목 : 1, 수량 : 1})

몽고에서의 사람들에서이 예에서 반환 된 문서의 필드 만 포함됩니다 item, qty그리고 _id.


따라서 다음과 같은 명령문을 발행 할 수 있어야합니다.

db.student.find({}, {roll:1, _id:0})

위의 문장은 학생들 컬렉션에서 모든 문서를 선택하며, 반환 된 문서 만 반환 roll필드 (및 제외 _id).

언급하지 않으면 _id:0반환 된 필드는 rolland _id입니다. '_id'필드는 항상 기본적으로 표시됩니다. 따라서 _id:0와 함께 명시 적으로 언급해야합니다 roll.


9
구글에게는 보이지 않으므로 한 번의 가치가 있습니다. 원하지 않는 모든 필드를 명시 적으로 제외해야합니까? 하나의 필드 만 원하지만 문서에 10 개의 필드를 명시 적으로 설정해야한다고 가정하십시오 0. 편집 : 신경 끄시는 제외 _id{field_I_want:1, _id:0}작동하는 것 같다
칼 Tryggvason에게

투영을 사용하면 필드를 추가 한 다음 문서를 업데이트 할 수 있습니까?
chovy

3
어떤 대답도 실제로 다음을 언급하지 않습니다. 참고 : With the exception of the _id field, you cannot combine inclusion and exclusion statements in projection documents.일부 사용자에게는 흥미로울 수 있습니다. ( source )
user0800

137

테이블에서 모든 데이터를 얻습니다

db.student.find({})

학생 선택 *


_id없이 테이블에서 모든 데이터 가져 오기

db.student.find({}, {_id:0})

학생 이름 선택, 롤


_id를 사용하여 한 필드에서 모든 데이터를 가져옵니다.

db.student.find({}, {roll:1})

아이디 선택, 학생으로부터의 롤


_id없이 한 필드에서 모든 데이터를 가져옵니다.

db.student.find({}, {roll:1, _id:0})

학생 선택 롤


where 절을 사용하여 지정된 데이터 찾기

db.student.find({roll: 80})

선택 * roll = '80'지역의 학생들로부터


where 절을 사용하고 조건보다 큰 데이터를 찾습니다.

db.student.find({ "roll": { $gt: 70 }}) // $gt is greater than 

선택 * 학생이 어디에서 롤> '70'


where 절을 사용하여 조건보다 크거나 같은 데이터를 찾습니다.

db.student.find({ "roll": { $gte: 70 }}) // $gte is greater than or equal

선택 * 학생이 어디에서 롤> = '70'


where 절을 사용하여 조건보다 작거나 같은 데이터를 찾습니다.

db.student.find({ "roll": { $lte: 70 }}) // $lte is less than or equal

선택 * 롤에서 학생 <= '70'


where 절을 사용하고 조건보다 작은 데이터를 찾습니다.

db.student.find({ "roll": { $lt: 70 }})  // $lt is less than

선택 * 롤 < '70'에서 학생으로부터



2
당신의 대답이 내 솔루션을 알아내는 데 도움이 되었기 때문에 _id를 제외한 모든 속성을 표시하는 것이 도움이 되었기 때문에 추가하고 싶었습니다 db.student.find({}, {_id:0}).
user8675309

58

나는 mattingly890이 정답을 가지고 있다고 생각합니다. 여기에 패턴 / 쉼표와 함께 또 다른 예가 있습니다.

db.collection.find( {}, {your_key:1, _id:0})

여기에 이미지 설명을 입력하십시오


mongo의 출력과 예제로 반환되는 것을 보여줍니다.
grepit

내 답변에 스크린 샷을 포함 시켰기 때문에 친구에게 투표권을 주셨습니까?
grepit

예, 또한 귀하의 답변이 @ therealrootuser 's anwer
Guillaume Lebreton

10

여기 3 가지 방법이 있습니다 . 지루한 것이 가장 짧 습니다 :

db.student.find({}, 'roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}).select('roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}, {'roll' : 1 , '_id' : 1 ); // <---- Old lengthy boring way

특정 필드 사용 연산자 를 제거 하려면 다음을 수행 하십시오- .

db.student.find({}).select('roll -_id') // <--- Will remove id from result

1
언급 한 명령은 몽구스에서 왔으며 3 번째 명령을 제외하고 mongodb는 아닙니다.
Ashish

8

교육 목적으로 만 다음 방법 중 하나로 수행 할 수 있습니다.

1.

    var query = {"roll": {$gt: 70};
    var cursor = db.student.find(query);
    cursor.project({"roll":1, "_id":0});

2.

    var query = {"roll": {$gt: 70};
    var projection = {"roll":1, "_id":0};
    var cursor = db.student.find(query,projection);

`


8

다음 쿼리를 시도하십시오.

db.student.find({}, {roll: 1, _id: 0}).pretty();

도움이 되었기를 바랍니다!!


pretty ()는 스크립트가 아닌 셸을 통해 실행할 때만 유용합니다.
Dinakar

7
db.<collection>.find({}, {field1: <value>, field2: <value> ...})

귀하의 예에서 다음과 같은 작업을 수행 할 수 있습니다.

db.students.find({}, {"roll":true, "_id":false})

투사

투영 매개 변수는 일치하는 문서에 반환되는 필드를 결정합니다. 투영 매개 변수는 다음 형식의 문서를 사용합니다.

{ field1: <value>, field2: <value> ... }
The <value> can be any of the following:
  1. 반환 문서에 필드를 포함하려면 1 또는 true입니다.

  2. 필드를 제외하려면 0 또는 false입니다.

노트

_id 필드의 경우 _id 필드를 반환하기 위해 _id : 1을 명시 적으로 지정할 필요는 없습니다. find () 메소드는 필드를 억제하기 위해 _id : 0을 지정하지 않으면 항상 _id 필드를 리턴합니다.

더 읽어보기


7

gowtham의 답변 은 완전 하지만 API에서 명령이 다를 수 있습니다 (Mongo의 셸을 사용하지 않는 명령).
자세한 내용은 설명서 링크 를 참조하십시오 .

예를 들어 Nodejs 에는 투영하기 위해 find 함수에 추가 할`projection이라는 메소드가 있습니다.

동일한 예제 세트에 따라 다음과 같은 명령을 Node와 함께 사용할 수 있습니다.

db.student.find({}).project({roll:1})

학생 _id 선택, 롤

또는
db.student.find({}).project({roll:1, _id: 0})

학생 선택 롤

등등.

nodejs 사용자의 경우 명령 toArray을 추가하기 위해 사용하는 것을 잊지 마십시오 (이 API를 사용한 적이 있다면 이미 알고 있어야 함) .then.


4

이해를 돕기 위해 비슷한 MySQL 쿼리를 작성했습니다.

Selecting specific fields 

MongoDB : db.collection_name.find ({}, {name : true, email : true, phone : true});

MySQL : SELECT 이름, 이메일, 전화 번호 FROM table_name;

Selecting specific fields with where clause

MongoDB : db.collection_name.find ({email : 'you@email.com '}, {name : true, email : true, phone : true});

MySQL : SELECT name, email, phone FROM table_name WHERE email = 'you@email.com';


3

이것은 나를 위해 작동합니다.

db.student.find({},{"roll":1})

where 절, 즉 첫 번째 중괄호 안에 조건이 없습니다. 다음 중괄호 안에 : 결과에 필요한 투영 필드 이름 목록과 1은 특정 필드가 쿼리 결과의 일부임을 나타냅니다.


2

학생의 이름을 얻는 중

student-details = db.students.find({{ "roll": {$gt: 70} },{"name": 1, "_id": False})

학생의 이름과 롤을 받고

student-details = db.students.find({{ "roll": {$gt: 70}},{"name": 1,"roll":1,"_id": False})

2

여기 MongoDB에 대한 쿼리 요금은 수집이며 설명은 필드입니다.

db.getCollection('fees').find({},{description:1,_id:0})

1

컬렉션의 10 개 레코드 모두에 대해서만 "롤"필드를 검색하려는 경우. 그런 다음 시도하십시오.

MongoDb에서 :

db.students.find ({}, { "roll": { "$ roll"})

Sql에서 :

학생들의 롤 선택


1

다른 객체에 중첩 된 필드를 표시하려면 다음 구문을 사용할 수 있다는 답변에 추가하고 싶습니다.

db.collection.find( {}, {{'object.key': true}})

여기에 object라는 객체 안에 키가 있습니다.

{ "_id" : ObjectId("5d2ef0702385"), "object" : { "key" : "value" } }

0
db.student.find({}, {"roll":1, "_id":0})

이것은-와 같습니다

학생의 롤 선택



db.student.find ({}, { "roll": 1, "name": 1, "_id": 0})

이것은-와 같습니다

학생의 롤, 이름을 선택하십시오


0

쉘에서 다음과 같은 쿼리를 사용하십시오.

1. 사용database_name

e.g: use database_name

2. 일치 할 때 자산 특정 필드 정보 만 반환 _id:0하고 결과에 ID를 표시하지 않도록 지정합니다.

db.collection_name.find( { "Search_Field": "value" }, 
                  { "Field_to_display": 1,_id:0 }  )

0

mongodb 3.4에서는 아래 로직을 사용할 수 있습니다. 이전 버전에 대해서는 잘 모르겠습니다.

학생에서 롤 선택 ==> db.student.find (! {}, {roll : 1})

위의 논리는 일부 열을 정의하는 데 도움이됩니다 (더 적은 경우)


0

MongoDB에 Studio 3T를 사용 .find({}, { _id: 0, roll: true })하면 여전히 빈 _id속성을 가진 객체 배열을 반환합니다 .

JavaScript를 사용 map하면 원하는 roll속성을 문자열 배열 로만 검색 할 수 있었습니다.

var rolls = db.student
  .find({ roll: { $gt: 70 } }) // query where role > 70
  .map(x => x.roll);           // return an array of role

0

이것이 질문에 대한 대답인지 확실하지 않지만 여기서 언급 할 가치가 있다고 생각합니다. 를 사용하여 단일 필드를 선택하는 방법이 하나 더 있습니다 (여러 개는 아님).db.collection_name.distinct();

예를 들어db.student.distinct('roll',{});

또는 두 번째 방법 : 사용 db.collection_name.find().forEach();(여러 필드를 연결하여 선택할 수 있음)

예를 들어 db.collection_name.find().forEach(function(c1){print(c1.roll);});

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.