programing

고유한 레코드 값 가져오기

javamemo 2023. 7. 4. 21:37
반응형

고유한 레코드 값 가져오기

일부 필드에서 값이 동일하지 않은 개체를 쿼리할 수 있는 방법이 있습니까?예를 들어 레코드가 있습니다.

{ id : 1, name : "my_name", salary : 1200 }
{ id : 2, name : "my_name", salary : 800 }
{ id : 3, name : "john", salary : 500 }

쿼리: NOT_THE_SAME(이름)으로 모두 찾기

필드에 동일한 값의 레코드를 원하지 않는다고 지정했기 때문에 ID가 1 및 3인 레코드만 원합니다.name또는 2와 3, 이 상황에서는 중요하지 않습니다.

를 사용하여 고유한 값 배열을 가져올 수 있습니다.

> db.test.distinct("name")
[ "my_name", "john" ]

필터링된 컬렉션과 함께 고유한 문장을 사용할 수도 있습니다.예를 들어 다음 쿼리를 사용하여 800 이상의 급여에서 고유한 이름 값을 얻을 수 있습니다.

db.test.distinct("name", { "salary": { $gt: 800 } })
db.test.aggregate([{$group: {_id: "$name", salary: {$max: "$salary"}}}])

모든 이름을 급여와 함께 나열해야 합니다.

$max요소당 최고 급여를 반환합니다.선택할 수도 있습니다.$first등을 참조하십시오. https://docs.mongodb.com/manual/reference/operator/aggregation/group/ #replicator-module을 참조하십시오.

만약 당신이 다양한 분야의 내용에 신경 쓰지 않고 전체 기록을 원한다면, 이것은 (덕분에, 전체를) 유지할 것입니다.$$ROOT) 각 "이름"에 대해 발견된 첫 번째 문서:

db.coll.aggregate([
  { "$group": { 
    "_id": "$name", 
    "doc": { "$first": "$$ROOT" }
  }},
  { "$replaceRoot": {
    "newRoot": "$doc"
  }}
])

$replaceRoot그것들을 캡슐화하는 대신 문서로 제공할 것입니다.doc로 필드를 치다._id.

다양한 필드의 내용이 걱정된다면 문서를 먼저 정렬하는 것이 좋을 것 같습니다.

db.coll.aggregate([
  { "$sort": { "$salary": 1 }},
  { "$group": { 
    "_id": "$name", 
    "doc": { "$first": "$$ROOT" } 
  }},
  { "$replaceRoot": {
    "newRoot": "$doc"
  }}
])

Mongo DB 버전 > 3.4

db.test.distinct("name")

몽고 DB 버전 < 3.4

db.test.aggregate([{$group: {_id: "$name", salary: {$max: "$salary"}}}])
db.runCommand ( {
    distinct: "CollectionName", 
    key: "key", 
    query: { "createdDate": { 
        $gte:new ISODate("2017-04-04T23:59:59Z"),
        $lte:new ISODate("2017-04-25T23:59:59Z")}} } )

이 쿼리는 컬렉션에서 데이터를 찾는 데 도움이 되며, 날짜 사이의 조건을 충족하는 모든 문서에서 키 값을 가져옵니다.

언급URL : https://stackoverflow.com/questions/20655506/get-distinct-records-values

반응형