[MONGODB] 인덱스에서 배열 필드의 별개의 집계를 얻기
MONGODB인덱스에서 배열 필드의 별개의 집계를 얻기
나는 MongoDB를 배울려고 어떻게 나를 위해 분석을 위해 도움이 될 것입니다. 단순히 자신의 웹 사이트에 자바 스크립트 콘솔을 사용할 수 장난있어 다음과 같은 항목을 만들었습니다 :
{"title": "Cool", "_id": {"$oid": "503e4dc0cc93742e0d0ccad3"}, "tags": ["twenty", "sixty"]}
{"title": "Other", "_id": {"$oid": "503e4e5bcc93742e0d0ccad4"}, "tags": ["ten", "thirty"]}
{"title": "Ouch", "_id": {"$oid": "503e4e72cc93742e0d0ccad5"}, "tags": ["twenty", "seventy"]}
{"title": "Final", "_id": {"$oid": "503e4e72cc93742e0d0ccad6"}, "tags": ["sixty", "seventy"]}
나는이 모든 개체에 대해 고유 한 태그의 목록을 얻을 수 있도록 내가 뭘하려는 쿼리입니다. 그 결과는 다음과 같이 보일 것입니다 :
["ten", "twenty", "thirty", "sixty", "seventy"]
어떻게 이것에 대한 쿼리는 무엇입니까? 나는 별개의 ()는 그것을 시도하고 있지만, 전화는 항상 심지어 쿼리하지 않고 실패합니다.
해결법
-
==============================
1.자신의 웹 사이트에 실패 코드는 실제 MongoDB의 인스턴스에서 작동합니다 :
자신의 웹 사이트에 실패 코드는 실제 MongoDB의 인스턴스에서 작동합니다 :
> db.posts.insert({title: "Hello", tags: ["one", "five"]}); > db.posts.insert({title: "World", tags: ["one", "three"]}); > db.posts.distinct("tags"); [ "one", "three", "five"]
기묘한.
-
==============================
2.당신은이를 사용할 수 있어야합니다 :
당신은이를 사용할 수 있어야합니다 :
db.mycollection.distinct("tags").sort()
-
==============================
3.당신은 통합 프레임 워크를 사용할 수 있습니다. 당신이 구조 결과를 원하는 방법에 따라 중 하나를 사용할 수 있습니다
당신은 통합 프레임 워크를 사용할 수 있습니다. 당신이 구조 결과를 원하는 방법에 따라 중 하나를 사용할 수 있습니다
var pipeline = [ {"$unwind": "$tags" } , { "$group": { _id: "$tags" } } ]; R = db.tb.aggregate( pipeline ); printjson(R); { "result" : [ { "_id" : "seventy" }, { "_id" : "ten" }, { "_id" : "sixty" }, { "_id" : "thirty" }, { "_id" : "twenty" } ], "ok" : 1 }
또는
var pipeline = [ {"$unwind": "$tags" } , { "$group": { _id: null, tags: {"$addToSet": "$tags" } } } ]; R = db.tb.aggregate( pipeline ); printjson(R); { "result" : [ { "_id" : null, "tags" : [ "seventy", "ten", "sixty", "thirty", "twenty" ] } ], "ok" : 1 }
-
==============================
4.웹 몽고의 커플 사용할 콘솔 있습니다 :
웹 몽고의 커플 사용할 콘솔 있습니다 :
당신이 그들에 도움을 입력하면하지만 그들은 단지 작전의 매우 작은 수를 지원 알게 될 것이다 :
HELP Note: Only a subset of MongoDB's features are provided here. For everything else, download and install at mongodb.org. db.foo.help() help on collection method db.foo.find() list objects in collection foo db.foo.save({a: 1}) save a document to collection foo db.foo.update({a: 1}, {a: 2}) update document where a == 1 db.foo.find({a: 1}) list objects in foo where a == 1 it use to further iterate over a cursor
이 지원되지 않기 때문에 이러한 구별대로 작동하지 않습니다.
-
==============================
5.통합 파이프 라인을 사용하여 독특한 배열 요소를 얻는 또 다른 방법
통합 파이프 라인을 사용하여 독특한 배열 요소를 얻는 또 다른 방법
db.blogs.aggregate( [ {$group:{_id : null, uniqueTags : {$push : "$tags"}}}, {$project:{ _id : 0, uniqueTags : { $reduce : { input : "$uniqueTags", initialValue :[], in : {$let : { vars : {elem : { $concatArrays : ["$$this", "$$value"] }}, in : {$setUnion : "$$elem"} }} } } }} ] )
수집
> db.blogs.find() { "_id" : ObjectId("5a6d53faca11d88f428a2999"), "name" : "sdfdef", "tags" : [ "abc", "def", "efg", "abc" ] } { "_id" : ObjectId("5a6d5434ca11d88f428a299a"), "name" : "abcdef", "tags" : [ "abc", "ijk", "lmo", "zyx" ] } >
관로
> db.blogs.aggregate( ... [ ... {$group:{_id : null, uniqueTags : {$push : "$tags"}}}, ... {$project:{ ... _id : 0, ... uniqueTags : { ... $reduce : { ... input : "$uniqueTags", ... initialValue :[], ... in : {$let : { ... vars : {elem : { $concatArrays : ["$$this", "$$value"] }}, ... in : {$setUnion : "$$elem"} ... }} ... } ... } ... }} ... ] ... )
결과
{ "uniqueTags" : [ "abc", "def", "efg", "ijk", "lmo", "zyx" ] }
from https://stackoverflow.com/questions/12183444/getting-a-distinct-aggregation-of-an-array-field-across-indexes by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] NoSQL이 많은 관계 많은 (및 MongoDB를 몽구스) (0) | 2019.12.18 |
---|---|
[MONGODB] MongoDB의에서 중첩 된 문서를 업데이트 (0) | 2019.12.18 |
[MONGODB] 어떻게 특정 필드를 기반으로 배열에 고유 한 항목을 보장하기 위해 - MongoDB를을? (0) | 2019.12.18 |
[MONGODB] 몽구스 독특한 자동 증가 필드 만들기 (0) | 2019.12.18 |
[MONGODB] 그것은 정수로하여 MongoDB의 _id 유형을 변경하는 것이 나쁜가요? (0) | 2019.12.18 |