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

내 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

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



답변

로부터 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.


답변

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

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’에서 학생으로부터



답변

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

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

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


답변

여기 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.

    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);

`


답변

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

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

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


답변

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 필드를 리턴합니다.

더 읽어보기