복붙노트

[MONGODB] 항목이있는 경우 어떻게 시험하여 MongoDB를 조회하는?

MONGODB

항목이있는 경우 어떻게 시험하여 MongoDB를 조회하는?

항목이 모든 필드의 값을 기준으로 존재하는 경우합니까 MongoDB를가 발견 또는 시험에 쿼리 방법을 제공? 우리는 항목의 전체 내용을 반환하지, 존재를 확인합니다.

해결법

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

    1.나는 그것의 값으로 항목의 존재를 확인하는 직선 방법이 있다고 생각 해달라고. 그러나 당신은 단지 (필드 선택과)에만 ID를 검색하여 그렇게 할 수

    나는 그것의 값으로 항목의 존재를 확인하는 직선 방법이 있다고 생각 해달라고. 그러나 당신은 단지 (필드 선택과)에만 ID를 검색하여 그렇게 할 수

    db.your_collection.find({..criteria..}, {"_id" : 1});
    
  2. ==============================

    2.당신이 수를 필요로하지 않기 때문에, 당신은 첫 번째 일치를 발견 한 후 쿼리가 반환됩니다 확인해야합니다. 카운트 성능이 적합하지 않기 때문에, 그것은 오히려 중요하다. 다음 쿼리는이 작업을 수행해야한다 :

    당신이 수를 필요로하지 않기 때문에, 당신은 첫 번째 일치를 발견 한 후 쿼리가 반환됩니다 확인해야합니다. 카운트 성능이 적합하지 않기 때문에, 그것은 오히려 중요하다. 다음 쿼리는이 작업을 수행해야한다 :

    db.Collection.find({ /* criteria */}).limit(1).size();
    

    한계 절을 준수하지 않는 기본적으로 () 계산합니다. 그 발견 ()를 참고 따라서 예기치 않은 결과를 반환 할 수 있습니다 (모든 경기를 찾으려고합니다). 크기 () 또는 COUNT (사실은) 한계 플래그를 존중합니다.

    당신이 극단으로 가고 싶은 경우에, 당신은 당신의 쿼리가 사용하는 인덱스 덮여 있는지 확인해야합니다. 대상 인덱스는 인덱스에 액세스하지만, 그들은 당신의 쿼리 필드가 인덱싱 할 것을 요구하고 있습니다. 카운트가 () 분명히 어떤 필드를 반환하지 않기 때문에 일반적으로, 그 그것을해야한다. 그러나 덮여 인덱스는 가끔 커서 자세한 오히려 필요

    db.values.find({"value" : 3553}, {"_id": 0, "value" : 1}).limit(1).explain();
    
    {
      // ...
      "cursor" : "BtreeCursor value_1",
      "indexOnly" : true,  // covered!
    }
    

    불행하게도, 그것의 가치가 여부를 말할 어렵다 그래서 여부, () (설명 제공하지 않습니다) 계산합니다. 평소와 같이, 측정은 더 큰 문제에서 당신을 저장 적어도 더 나은 이론보다는 동반자,하지만 이론 캔입니다.

  3. ==============================

    3.db.collection.find (_ {ID "MYID"}, {_id : 1}). 한계 (1)

    db.collection.find (_ {ID "MYID"}, {_id : 1}). 한계 (1)

    (대신 db.collection.findOne (의 ID {_ "MYID"}, {_id : 1})).

    자세한 내용은 봐 : 검사를 문서가 존재하는 경우 - 찾기 대 MongoDB를 천천히 findOne을

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

    4.몽고 2.6 시작, 카운트는 문서가 존재하는지 여부를 찾아 그것을 실행 가능한 대안을 만드는 한계 선택적 매개 변수가 있습니다 :

    몽고 2.6 시작, 카운트는 문서가 존재하는지 여부를 찾아 그것을 실행 가능한 대안을 만드는 한계 선택적 매개 변수가 있습니다 :

    db.collection.count({}, { limit: 1 })
    // returns 1 if exists and 0 otherwise
    

    또는 필터링 쿼리 :

    db.collection.count({/* criteria */}, { limit: 1 })
    

    일치하는 대신 전체 컬렉션을가는 찾을 때마다 일치하는 사건의 수를 제한하면 컬렉션 스캔 중지한다.

    몽고 4.0.3 시작, 카운트 ()로 간주되기 때문에 우리가 대신 countDocuments을 사용할 수 있습니다되지 않습니다 :

    db.collection.countDocuments({}, { limit: 1 })
    

    또는 필터링 쿼리 :

    db.collection.countDocuments({/* criteria */}, { limit: 1 })
    
  5. ==============================

    5.나는 단순히 lodash 프레임 워크를 사용했다 - _isEmpty를 ();

    나는 단순히 lodash 프레임 워크를 사용했다 - _isEmpty를 ();

    const {
        MongoClient,
        ObjectId
    } = require('mongodb');
    const _ = require('lodash');
    
    MongoClient.connect(testURL, {
        useNewUrlParser: true
    }, (err, client) => {
        let db = client.db('mycompany');
    
        if (err) {
            console.log('unable to connect to the mycompany database');
        } else {
            console.log('test connection to the database');
        };
    
        db.collection('employee').find({
            name: 'Test User'
        }).toArray((err, result) => {
    
            if (err) {
                console.log('The search errored');
            } else if (_.isEmpty(result)) {
                console.log('record not found')
            } else {
                console.log(result);
            };
        });
        client.close();
    });
    
  6. ==============================

    6.당신은 자바와 스프링을 사용하는 경우 당신은 사용할 수 있습니다 :

    당신은 자바와 스프링을 사용하는 경우 당신은 사용할 수 있습니다 :

    public interface UserRepository extends MongoRepository<User, ObjectId> {
    
        boolean existsByUsername(String username);
    
    }
    

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

  7. from https://stackoverflow.com/questions/8389811/how-to-query-mongodb-to-test-if-an-item-exists by cc-by-sa and MIT license