[MONGODB] 필드를 유지하는 방법 몽고 그룹 쿼리
MONGODB필드를 유지하는 방법 몽고 그룹 쿼리
각자 모두. 몽고 그룹 쿼리에서 인수의 결과만을 도시 키 (들). MySQL의 쿼리 그룹 등 각 그룹의 첫 번째 문서를 보관하는 방법. 예를 들어 :
-------------------------------------------------------------------------
| name | age | sex | province | city | area | address |
-------------------------------------------------------------------------
| ddl1st | 22 | 纯爷们 | BeiJing | BeiJing | ChaoYang | QingNianLu |
| ddl1st | 24 | 纯爷们 | BeiJing | BeiJing | XuHui | ZhaoJiaBangLu |
| 24k | 220 | ... | .... | ... | ... | ... |
-------------------------------------------------------------------------
db.users.group({key: { name: 1},reduce: function ( curr, result ) { result.count ++ },initial: {count : 0 } })
결과:
[
{
"name" : "ddl1st",
"count" : 1
},
{
"name" : "24k",
"count" : 1
}
]
어떻게 다음을 얻을 수 있습니다 :
[
{
"name" : "ddl1st",
"age" : 22,
"sex" : "纯爷们",
"province" : "BeiJing",
"city" : "BeiJing",
"area" : "ChaoYang",
"address" : "QingNianLu",
"count" : 1
},
{
"name" : "24k",
"age" : 220,
"sex" : "...",
"province" : "...",
"city" : "...",
"area" : "...",
"address" : "...",
"count" : 1
}
]
해결법
-
==============================
1.각 그룹의 첫 번째 일치 항목에 대한 정보를 유지하려는 경우, 당신은 같은 집계 시도 할 수 있습니다 :
각 그룹의 첫 번째 일치 항목에 대한 정보를 유지하려는 경우, 당신은 같은 집계 시도 할 수 있습니다 :
db.test.aggregate({ $group: { _id: '$name', name : { $first: '$name' } age : { $first: '$age' }, sex : { $first: '$sex' }, province : { $first: '$province' }, city : { $first: '$city' }, area : { $first: '$area' }, address : { $first: '$address' }, count: { $sum: 1 } } }
-
==============================
2.만을 먼저 문서를 유지하려는 경우 그건 그렇고, 당신은 $ addToSet을 사용할 수 있습니다 예를 들면 :
만을 먼저 문서를 유지하려는 경우 그건 그렇고, 당신은 $ addToSet을 사용할 수 있습니다 예를 들면 :
db.test.aggregate({ $group: { _id: '$name', name : { $addToSet: '$name' } age : { $addToSet: '$age' }, count: { $sum: 1 } } }
-
==============================
3.이 작업을 시도 할 수
이 작업을 시도 할 수
db.test.aggregate({ { $group: { _id: '$name',count: { $sum: 1 }, data: { $push: '$$ROOT' } } }, { $project: { _id:0, data:1, count :1 } } }
-
==============================
4.나는 대답을 찾고 여기에 들어 왔지만 (특히 그것의 나이에 주어진) 선택한 답변에 만족하지 않았다. 나는 더 나은 솔루션 (적응)는이 해답을 발견 :
나는 대답을 찾고 여기에 들어 왔지만 (특히 그것의 나이에 주어진) 선택한 답변에 만족하지 않았다. 나는 더 나은 솔루션 (적응)는이 해답을 발견 :
db.test.aggregate({ $group: { _id: '$name', person: { "$first": "$$ROOT" }, count: { $sum: 1 } }, { "$replaceRoot": { "newRoot": "$person" } } }
-
==============================
5.이것은 내가 그것을 잘 작동 한 것입니다.
이것은 내가 그것을 잘 작동 한 것입니다.
db.person.aggregate([ { $group: { _id: '$name'}, // pass the set of field to be grouped age : { $first: '$age' }, // retain remaining field count: { $sum: 1 } // count based on your group }, { $project:{ name:"$_id.name", age: "$age", count: "$count", _id:0 } }])
-
==============================
6.나는 .group 도우미에 대해 알고하지 않았다,하지만 당신은 집계 프레임 워크로 이동하고 싶은 경우에, 당신은 반환 할 필드를 지정해야합니다. 만약 내가 틀렸다면 정정 해줘,하지만 SQL에서 당신은 어쨌든해야 할 것입니다.
나는 .group 도우미에 대해 알고하지 않았다,하지만 당신은 집계 프레임 워크로 이동하고 싶은 경우에, 당신은 반환 할 필드를 지정해야합니다. 만약 내가 틀렸다면 정정 해줘,하지만 SQL에서 당신은 어쨌든해야 할 것입니다.
음, 이것은 당신이 집계 프레임 워크는 전에 언급에 어떻게 할 것입니다 :
db.test.aggregate({ $group: { _id: { name: "$name", city: "$city", fieldName: "$fieldName" }, count: { $sum: 1 } } })
-
==============================
7.나는 ... 언 와인드 단계를 반대로 일반화 너희들이 어떤 버그가 발생하면 알려이 기능을 만들었지 만 그것은 나를 위해 잘 작동하고!
나는 ... 언 와인드 단계를 반대로 일반화 너희들이 어떤 버그가 발생하면 알려이 기능을 만들었지 만 그것은 나를 위해 잘 작동하고!
const createReverseUnwindStages = unwoundField => { const stages = [ // // Group by the unwound field, pushing each unwound value into an array, // // Store the data from the first unwound document // (which should all be the same apart from the unwound field) // on a field called data. // This is important, since otherwise we have to specify every field we want to keep individually. // { $group: { _id: '$_id', data: {$first: '$$ROOT'}, [unwoundField]: {$push: `$${unwoundField}`}, }, }, // // Copy the array of unwound fields resulting from the group into the data object, // overwriting the singular unwound value // { $addFields: {[`data.${unwoundField}`]: `$${unwoundField}`}, }, // // Replace the root with our data object // { $replaceRoot: { newRoot: '$data', }, }, ] return stages }
-
==============================
8.여기에 대답은 >>>>
여기에 대답은 >>>>
$m = new \MongoDB\Driver\Manager(); $command = new \MongoDB\Driver\Command([ 'aggregate' => 'mytestusers', 'pipeline' => [ ['$match' => ['name' => 'Pankaj Choudhary']], ['$unwind'=>'$skills'], ['$lookup' => array('from'=>'mytestskills','localField'=>'skills','foreignField'=>'_id','as'=>'sdfg')], ['$unwind'=>'$sdfg'], ['$group'=>array('_id'=>array('_id'=>'$_id','name'=>'$name','email'=>'$email'),'skills'=>array('$push'=>'$skills'),'sdfg'=>array('$push'=>'$sdfg'))], ], 'cursor' => new \stdClass, ]); $cursor = $m->executeCommand('targetjob-plus', $command); $result = $cursor->toArray();
from https://stackoverflow.com/questions/16662405/mongo-group-query-how-to-keep-fields by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 시작에 어떻게 MongoDB를 컨테이너에 대한 DB를 만드는 방법? (0) | 2019.12.11 |
---|---|
[MONGODB] 삽입 / Mongoid를 사용하여 업데이트를 배치? (0) | 2019.12.11 |
[MONGODB] 서버에 127.0.0.1 쉘 / mongo.js를 연결할 수 없습니다 (0) | 2019.12.10 |
[MONGODB] 집계 프레임 워크에 대한 설명 MongoDB를 (0) | 2019.12.10 |
[MONGODB] 왜 MongoDB의에서 인덱스 문제의 방향을합니까? (0) | 2019.12.10 |