복붙노트

[MONGODB] ID의 목록을 감안할 때, IDS 컬렉션에 존재하지 않는 쿼리하는 가장 좋은 방법은 무엇입니까?

MONGODB

ID의 목록을 감안할 때, IDS 컬렉션에 존재하지 않는 쿼리하는 가장 좋은 방법은 무엇입니까?

나는 고유 ID 필드가 포함 된 문서의 컬렉션을 가지고있다. 지금은 컬렉션에 존재하지 않는 어떤 ID를 포함 할 수있다 ID의 목록을 가지고있다. 목록에서 해당 ID를 알아내는 가장 좋은 방법은 무엇입니까?

나는 다음 지정된 ID의 목록을 비교 목록에 포함 된 ID를 가지고있는 문서를 얻기 위해 운영자에 $를 사용할 수 있습니다 알고 있지만, 그것을 할 수있는 더 좋은 방법은 무엇입니까?

해결법

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

    1.불행하게도 MongoDB를 만 기능 내장 사용할 수 있습니다 (그렇지 않으면 나는 세트를 사용하는 것이 좋습니다 것입니다)하지만 당신은 시도하고 귀하의 목록에있는 모든 고유 한 ID를 다음 단지 수동으로 꺼내 찾을 수 있습니다.

    불행하게도 MongoDB를 만 기능 내장 사용할 수 있습니다 (그렇지 않으면 나는 세트를 사용하는 것이 좋습니다 것입니다)하지만 당신은 시도하고 귀하의 목록에있는 모든 고유 한 ID를 다음 단지 수동으로 꺼내 찾을 수 있습니다.

    (테스트되지 않은) 식으로 뭔가 :

    var your_unique_ids = ["present", "not_present"];
    
    var present_ids = db.getCollection('your_col').distinct('unique_field', {unique_field: {$in: your_unique_ids}});
    
    for (var i=0; i < your_unique_ids.length; i++) {
        var some_id = your_unique_ids[i];
        if (present_ids.indexOf(some_id) < 0) {
            print(some_id);
        }
    }
    
  2. ==============================

    2.난 당신이 컬렉션에 다음의 서류를 가지고 가정 :

    난 당신이 컬렉션에 다음의 서류를 가지고 가정 :

    { "_id" : ObjectId("55b725fd7279ca22edb618bb"), "id" : 1 }
    { "_id" : ObjectId("55b725fd7279ca22edb618bc"), "id" : 2 }
    { "_id" : ObjectId("55b725fd7279ca22edb618bd"), "id" : 3 }
    { "_id" : ObjectId("55b725fd7279ca22edb618be"), "id" : 4 }
    { "_id" : ObjectId("55b725fd7279ca22edb618bf"), "id" : 5 }
    { "_id" : ObjectId("55b725fd7279ca22edb618c0"), "id" : 6 }
    

    및 ID의 다음 목록

    var listId = [ 1, 3, 7, 9, 8, 35 ];
    

    우리는 컬렉션에없는 ID의 배열을 반환 .filter의 방법을 사용할 수 있습니다.

    var result = listId.filter(function(el){
        return db.collection.distinct('id').indexOf(el) == -1; });
    

    이 수익률

    [ 7, 9, 8, 35 ] 
    

    지금 당신은 또한 통합 프레임 워크하고 $ setDifference 연산자를 사용할 수 있습니다.

    db.collection.aggregate([
       { "$group": { "_id": null, "ids": { "$addToSet": "$id" }}}, 
       { "$project" : { "missingIds": { "$setDifference": [ listId, "$ids" ]}, "_id": 0 }}
    ])
    

    이 수율 :

    { "missingIds" : [ 7, 9, 8, 35 ] }
    
  3. ==============================

    3.쿼리는 당신에게 결과를 가져 아래 :

    쿼리는 당신에게 결과를 가져 아래 :

    var listid = [1,2,3,4];
    
    db.collection.aggregate([
     {$project: { uniqueId : 
       {
        "$setDifference": 
            [ listid , db.collection.distinct( "unique_field" )]} , _id : 0 }
       }, 
     {$limit:1}
    ]);
    
  4. from https://stackoverflow.com/questions/31663037/given-a-list-of-ids-whats-the-best-way-to-query-which-ids-do-not-exist-in-the by cc-by-sa and MIT license