[MONGODB] MongoDB를 별개의 기록을 얻을
MONGODBMongoDB를 별개의 기록을 얻을
나는 형식을 다음의 컬렉션이있는 나는 MongoDB를 사용하고 있습니다.
{"id" : 1 , name : x ttm : 23 , val : 5 }
{"id" : 1 , name : x ttm : 34 , val : 1 }
{"id" : 1 , name : x ttm : 24 , val : 2 }
{"id" : 2 , name : x ttm : 56 , val : 3 }
{"id" : 2 , name : x ttm : 76 , val : 3 }
{"id" : 3 , name : x ttm : 54 , val : 7 }
해당 모음에 나는 이런 식으로 내림차순으로 기록을 얻기 위해 조회했다 :
db.foo.find({"id" : {"$in" : [1,2,3]}}).sort(ttm : -1).limit(3)
그러나 동일한 ID = 1의 두 개의 레코드를 제공하고 나는 그것이 ID 당 한 기록을 제공하도록 기록을합니다.
그것은 MongoDB를에 수 있습니까?
해결법
-
==============================
1.쿼리와 함께 사용할 수 있습니다 MongoDB의에서 별개의 명령이 있습니다. 그러나, 나는이 그냥 확신이 당신이 경우 원하는 정확히 무엇을 줄 것 아니에요 때문에 (즉, 귀하의 경우, 당신은 단지 ID 값이 반환받을 것) 당신의 이름을 특정 키 값의 고유 한 목록을 반환 생각 전체 문서를 필요 - 대신 맵리 듀스가 필요할 수 있습니다.
쿼리와 함께 사용할 수 있습니다 MongoDB의에서 별개의 명령이 있습니다. 그러나, 나는이 그냥 확신이 당신이 경우 원하는 정확히 무엇을 줄 것 아니에요 때문에 (즉, 귀하의 경우, 당신은 단지 ID 값이 반환받을 것) 당신의 이름을 특정 키 값의 고유 한 목록을 반환 생각 전체 문서를 필요 - 대신 맵리 듀스가 필요할 수 있습니다.
별개의 문서 : http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Distinct
-
==============================
2.당신은 집계를 사용하고 싶습니다. 이 같은 그렇게 할 수 있습니다 :
당신은 집계를 사용하고 싶습니다. 이 같은 그렇게 할 수 있습니다 :
db.test.aggregate([ // each Object is an aggregation. { $group: { originalId: {$first: '$_id'}, // Hold onto original ID. _id: '$id', // Set the unique identifier val: {$first: '$val'}, name: {$first: '$name'}, ttm: {$first: '$ttm'} } }, { // this receives the output from the first aggregation. // So the (originally) non-unique 'id' field is now // present as the _id field. We want to rename it. $project:{ _id : '$originalId', // Restore original ID. id : '$_id', // val : '$val', name: '$name', ttm : '$ttm' } } ])
이는 10 만 개 문서 내 테스트 DB를위한 매우 빠른 ... ~ 90ms의 것입니다.
예:
db.test.find() // { "_id" : ObjectId("55fb595b241fee91ac4cd881"), "id" : 1, "name" : "x", "ttm" : 23, "val" : 5 } // { "_id" : ObjectId("55fb596d241fee91ac4cd882"), "id" : 1, "name" : "x", "ttm" : 34, "val" : 1 } // { "_id" : ObjectId("55fb59c8241fee91ac4cd883"), "id" : 1, "name" : "x", "ttm" : 24, "val" : 2 } // { "_id" : ObjectId("55fb59d9241fee91ac4cd884"), "id" : 2, "name" : "x", "ttm" : 56, "val" : 3 } // { "_id" : ObjectId("55fb59e7241fee91ac4cd885"), "id" : 2, "name" : "x", "ttm" : 76, "val" : 3 } // { "_id" : ObjectId("55fb59f9241fee91ac4cd886"), "id" : 3, "name" : "x", "ttm" : 54, "val" : 7 } db.test.aggregate(/* from first code snippet */) // output { "result" : [ { "_id" : ObjectId("55fb59f9241fee91ac4cd886"), "val" : 7, "name" : "x", "ttm" : 54, "id" : 3 }, { "_id" : ObjectId("55fb59d9241fee91ac4cd884"), "val" : 3, "name" : "x", "ttm" : 56, "id" : 2 }, { "_id" : ObjectId("55fb595b241fee91ac4cd881"), "val" : 5, "name" : "x", "ttm" : 23, "id" : 1 } ], "ok" : 1 }
장점 : 거의 확실히 빠른 방법.
단점 : 복잡한 집계 API의 사용을 포함한다. 또한, 단단히 문서의 원래 스키마에 연결된다. 이 일반화 비록, 그것은 가능하다.
-
==============================
3.문제는 당신이 일치하는 결과 사이에서 선택하는 방법에 대한 쿼리에 어떤 논리를 제공하지 않고 하나에 이르기까지 3 개 일치하는 레코드를 증류 할 것입니다.
문제는 당신이 일치하는 결과 사이에서 선택하는 방법에 대한 쿼리에 어떤 논리를 제공하지 않고 하나에 이르기까지 3 개 일치하는 레코드를 증류 할 것입니다.
옵션은 어떤 종류의 통합 로직 (예를 들어, 각 열에 대한 최대 또는 최소 값을 선택)를 지정하거나 선택 별개의 쿼리를 실행하기 만하면 구별되어야 할 것으로 필드를 선택 기본적으로 있습니다.
querymongo.com는 (SQL에서 MongoDB를에) 당신이 별개의 쿼리를 번역의 좋은 일을한다.
예를 들어,이 SQL :
SELECT DISTINCT columnA FROM collection WHERE columnA > 5
이 MongoDB를로 반환됩니다 :
db.runCommand({ "distinct": "collection", "query": { "columnA": { "$gt": 5 } }, "key": "columnA" });
-
==============================
4.나는이 같은 집계를 사용할 수 있다고 생각합니다
나는이 같은 집계를 사용할 수 있다고 생각합니다
collection.aggregate({ $group : { "_id" : "$id", "docs" : { $first : { "name" : "$name", "ttm" : "$ttm", "val" : "$val", } } } });
-
==============================
5.당신은 자바 스크립트를 사용하여 파일의 서로 다른 결과를 기록 할 경우 ...이 당신이 어떻게
당신은 자바 스크립트를 사용하여 파일의 서로 다른 결과를 기록 할 경우 ...이 당신이 어떻게
cursor = db.myColl.find({'fieldName':'fieldValue'}) var Arr = new Array(); var count = 0; cursor.forEach( function(x) { var temp = x.id; var index = Arr.indexOf(temp); if(index==-1) { printjson(x.id); Arr[count] = temp; count++; } })
from https://stackoverflow.com/questions/5089162/mongodb-get-distinct-records by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽구스 / MongoDB의 결과 필드는 자바 스크립트에서 정의되지 않은 나타납니다 (0) | 2019.12.09 |
---|---|
[MONGODB] MongoDB의 일치는 기본이되는 문자와 같은 문자를 악센트 (0) | 2019.12.09 |
[MONGODB] 배열 내에서 MongoDB를 이름 바꾸기 데이터베이스 필드 (0) | 2019.12.09 |
[MONGODB] MongoDB의 배열에서 특정 요소를 받기 [중복] (0) | 2019.12.09 |
[MONGODB] (MongoDB의 자바) 배열에 $ 추진 (0) | 2019.12.09 |