programing

MongoDB 컬렉션의 모든 문서에 대해 단일 필드를 선택하려면 어떻게 해야 합니까?

starjava 2023. 3. 23. 22:12
반응형

MongoDB 컬렉션의 모든 문서에 대해 단일 필드를 선택하려면 어떻게 해야 합니까?

MongoDB에는 "MongoDB"라는 필드를 .name ★★★★★★★★★★★★★★★★★」roll의 한 가지 은 다음과 같습니다.

{
    "_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()메서드는 쿼리와 일치하는 모든 문서를 반환합니다.결과 집합에서는 항목 및 QTY 필드만 기본적으로 _id 필드가 일치하는 문서에 반환됩니다.

db.inventory.find( { type: 'food' }, { item: 1, qty: 1 } )

있는 의 이 에는 Mongo의 됩니다.item,qty , , , , 입니다._id.


따라서 다음과 같은 스테이트먼트를 발행할 수 있습니다.

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

하고 반환된 는 반환된 됩니다.roll)_id를 참조해 주세요.

_id:0는 """입니다.roll ★★★★★★★★★★★★★★★★★」_id'_id'로 하다 때문에 을 해야 합니다._id:0 roll.

테이블에서 모든 데이터를 가져오다

db.student.find({})

학생에서 * 선택


_id가 없는 테이블에서 모든 데이터를 가져옵니다.

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

이름 선택, 학생에서 롤


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

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

ID 선택, 학생에서 롤


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

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

학생에서 롤 선택


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

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

* 학생 중에서 롤 = '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

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


조건보다 작은 where 절을 사용하여 데이터를 찾다

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

학생에서 * 를 선택합니다.롤 < '70'

mattingly890은 정답을 가지고 있다고 생각합니다.여기 패턴/커맨드와 함께 다른 예가 있습니다.

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

> db.mycollection.find().pretty();

{
    "_id": ObjectId("54ffca63cea5644e7cda8e1a"),
    "host": "google",
    "ip": "1.1.192.1"
}
db.mycollection.find({},{ "_id": 0, "host": 1 }).pretty();

여기 있습니다. 세 가지 방법, 가장 짧은 방법부터 지루한 방법까지:

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

특정 필드 사용을 삭제하려면-operator :

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

Gowtham의 답변은 완전하지만 이러한 명령어는 API마다 다를 수 있습니다(mongo의 셸을 사용하지 않는 경우).
자세한 내용은 문서 링크를 참조하십시오.

예를 들어 Nodejs에는 프로젝션이라고 불리는 메서드가 있습니다.이 메서드는 투영을 위해 find 함수에 추가합니다.

동일한 예제에 따라 다음과 같은 명령을 노드에서 사용할 수 있습니다.

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

선택 _id, 학생에서 롤


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

학생에서 롤 선택

기타 등등.

nodejs 사용자에 대해서는 (이 API를 이전에 사용했다면 이미 숙지하고 있어야 할 것)를 사용하여 다음을 추가해 주세요..then명령어를 입력합니다.

다음 쿼리를 시도합니다.

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

콘솔을 사용하는 경우 읽기 쉽게 pretty()를 추가할 수 있습니다.

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

이게 도움이 됐으면 좋겠어!!

교육 목적으로 다음 방법 중 하나를 사용할 수도 있습니다.

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.<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 필드를 반환합니다.

더 읽기

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

Selecting specific fields 

MongoDB : db.collection_name.find }, {name:true, e-메일:true, phone:true};

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

Selecting specific fields with where clause

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

MySQL : 이름, 이메일, 전화 FROM table_name WHERE 이메일 = 'you@email.com';

난 이게 좋아

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

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

학생의 이름을 알아내다

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

다른 개체에 중첩된 필드를 표시하려면 다음 구문을 사용할 수 있습니다.

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

개체 이름 안에 키가 있습니다.

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

 var collection = db.collection('appuser');
    collection.aggregate(
      { $project : { firstName : 1, lastName : 1 } },function(err, res){
        res.toArray(function(err, realRes){
          console.log("response roo==>",realRes);
        });
      });  
  • 그건 효과가 있다.

셸에서 다음과 같이 쿼리를 사용합니다.

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

컬렉션의 모든 10개 레코드에 대해서만 "roll" 필드를 가져오려면 다음과 같이 하십시오.그럼 이거 먹어봐.

MongoDb의 경우:

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

SQL의 경우:

학생 중에서 출석을 고르다

여기서 MongoDB에 대한 문의는 요금 징수이며 설명은 필드입니다.

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

사람들이 이미 언급한 것 말고도 나는 단지 혼합물에 대한 지표를 소개하고 있을 뿐이다.

예를 들어 100만 개가 넘는 문서가 포함된 대규모 컬렉션을 상상해 보십시오. 이러한 쿼리를 실행해야 합니다.

WiredTiger 내부 캐시에 대해 이 쿼리를 실행해야 할 경우 모든 데이터를 캐시에 보관해야 합니다.DB로부터의 취득이 완료되기 전에 데이터가 FS 캐시 또는 디스크에서 WT 내부 캐시에 공급되지 않는 경우(데이터베이스에 접속되어 있는 드라이버로부터 호출되어 100만 개의 문서가 한 번에 반환되지 않는 경우 커서가 재생됩니다).

커버드 쿼리는 다른 방법이 될 수 있습니다.문서에서 직접 텍스트 복사

인덱스가 쿼리를 커버하면 MongoDB는 쿼리 조건과 일치하고 인덱스 키만 사용하여 결과를 반환할 수 있습니다.MongoDB는 결과를 반환하기 위해 컬렉션의 문서를 검토할 필요가 없습니다.

인덱스가 쿼리를 포함하는 경우 설명 결과는 FETCH 단계의 하위 단계가 아닌 IXSCAN 단계를 가지며 executionStats에서는 totalDocsExamined는 0입니다.

Query :  db.getCollection('qaa').find({roll_no : {$gte : 0}},{_id : 0, roll_no : 1})

Index : db.getCollection('qaa').createIndex({roll_no : 1})

여기서 인덱스가 WT 내부 캐시에 있는 경우 값을 얻는 것은 간단한 프로세스입니다.인덱스는 시스템의 쓰기 성능에 영향을 미치기 때문에 읽기가 쓰기보다 많은 경우 더 적합합니다.

NodeJs에서 MongoDB 드라이버를 사용하는 경우 위의 답변이 작동하지 않을 수 있습니다.선택한 속성만 응답으로 가져오려면 이와 같은 작업을 수행해야 합니다.

import { MongoClient } from "mongodb";

// Replace the uri string with your MongoDB deployment's connection string.
const uri = "<connection string uri>";
const client = new MongoClient(uri);

async function run() {
  try {
    await client.connect();
    const database = client.db("sample_mflix");
    const movies = database.collection("movies");

    // Query for a movie that has the title 'The Room'
    const query = { title: "The Room" };

    const options = {
      // sort matched documents in descending order by rating
      sort: { "imdb.rating": -1 },
      // Include only the `title` and `imdb` fields in the returned document
      projection: { _id: 0, title: 1, imdb: 1 },
    };

    const movie = await movies.findOne(query, options);

    /** since this method returns the matched document, not a cursor, 
     * print it directly 
    */
    console.log(movie);
  } finally {
    await client.close();
  }
}

run().catch(console.dir);

이 코드는 여기에서 확인할 수 있는 실제 MongoDB 문서에서 복사한 것입니다.https://docs.mongodb.com/drivers/node/current/usage-examples/findOne/

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

이것은 -에 해당합니다.

학생에서 롤을 선택합니다.



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

이것은 -에 해당합니다.

롤 선택, 학생 이름

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

학생 ==> db.db.deb.find(!{, {roll:1})에서 roll을 선택합니다.

위의 논리는 일부 컬럼을 정의하는 데 도움이 됩니다(더 작은 경우).

Studio 하여 MongoDB용 Studio 3T를 사용하는 .find({}, { _id: 0, roll: true }) 빈 됩니다._id★★★★★★★★★★★★★★★★★★.

JavaScript map me to retrieve desired " (원하는 "만")roll속성을 문자열 배열로 지정합니다.

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

이 질문에 대한 답은 확실하지 않지만 여기서 언급할 가치가 있다고 생각합니다. 밖에도 필드를 하지 않고 한하는 방법이 .db.collection_name.distinct();

를 들어 카톡스,db.student.distinct('roll',{});

두 방법:db.collection_name.find().forEach();할 수 (접속)

,,db.collection_name.find().forEach(function(c1){print(c1.roll);});

_id = "123321"; _user = await likes.find({liker_id: _id},{liked_id:"$liked_id"}); ; liker_id 및 liked_id 、 liked_id 、 liked_id 、 $liked_id 、 liked_id 。

업데이트의 : " " " " :db.collection_name.update({ field_name_1: ("value")}, { $set: { field_name_2 : "new_value" }});

: MultiUpdate의 경우:db.collection_name.updateMany({ field_name_1: ("value")}, { $set: {field_name_2 : "new_value" }});

인덱스가 적절한지 확인합니다.

언급URL : https://stackoverflow.com/questions/25589113/how-to-select-a-single-field-for-all-documents-in-a-mongodb-collection

반응형