[MONGODB] MongoDB의 내부 배열 크기 쿼리
MONGODBMongoDB의 내부 배열 크기 쿼리
사용자 모음의 MongoDB의 문서를 고려 :
{ username : 'Alex', tags: ['C#', 'Java', 'C++'] }
어떤 방법 (클라이언트에 태그를 거치지 않고) 서버 측에서 태그 배열의 길이를 얻을 수 있나요?
고맙습니다!
해결법
-
==============================
1.이제 MongoDB를 (2.6 릴리스) 집계에 $ 크기 작업을 지원합니다.
이제 MongoDB를 (2.6 릴리스) 집계에 $ 크기 작업을 지원합니다.
문서에서 :
{ <field>: { $size: <array> } }
당신이를 사용하여 하나에 다음과 같이 수행 할 수 있습니다합니다 :
db.users.aggregate( [ { $group: { _id: "$username", tags_count: {$first: {$size: "$tags" }} } } ] )
또는
db.users.aggregate( [ { $project: { tags_count: {$size: "$tags"} } } ] )
-
==============================
2.이름 알렉스가 고유 한 경우, 당신은 다음 코드를 사용할 수 있습니다 :
이름 알렉스가 고유 한 경우, 당신은 다음 코드를 사용할 수 있습니다 :
db.test.insert({username:"Alex", tags: ['C#', 'Java', 'C++'] }); db.test.aggregate( {$match: {username : "Alex"}}, {$unwind: "$tags"}, {$project: {count:{$add:1}}}, {$group: {_id: null, number: {$sum: "$count" }}} ); { "result" : [ { "_id" : null, "number" : 3 } ], "ok" : 1 }
-
==============================
3.나는 아마 또는 일정에 작업을 통해 INC $를 사용 (별도의 필드로) 저장 각 태그의 수를 계산하는 것이 더 효율적 것 같아요.
나는 아마 또는 일정에 작업을 통해 INC $를 사용 (별도의 필드로) 저장 각 태그의 수를 계산하는 것이 더 효율적 것 같아요.
또한지도 / 감소 (정식 예)이 작업을 수행 할 수 있지만 당신이 원하는 것 무엇을 할 수있을 것 같지 않습니다.
나는 확실히 당신이 요구하는 무엇을 정확하게하는 것이 가능하지 않다,하지만 당신은 $ 크기가 일정 크기에 맞게 모든 문서를 조회 할 수 있습니다 ...
> db.collection.find({ tags : { $size: 3 }});
즉 3 개 태그 당신에게 모든 문서를 얻을 것 ...
-
==============================
4.xmm.dev의 대답은 간단하게 할 수 있습니다 대신 중간체 필드 '수'를 가지고, 당신은 $ 그룹에 직접적으로 요약 할 수 있습니다 :
xmm.dev의 대답은 간단하게 할 수 있습니다 대신 중간체 필드 '수'를 가지고, 당신은 $ 그룹에 직접적으로 요약 할 수 있습니다 :
db.test.aggregate( {$match: {username : "Alex"}}, {$unwind: "$tags"}, {$group: {_id: null, number: {$sum: 1 }}} )
-
==============================
5.현재, 그것을 할 수있는 유일한 방법은 db.eval을 사용하는 것으로 보이지만, 다른 작업이 잠금 데이터베이스.
현재, 그것을 할 수있는 유일한 방법은 db.eval을 사용하는 것으로 보이지만, 다른 작업이 잠금 데이터베이스.
가장 속도 효율적인 방법이 추가 필드를 추가 할 것이라고 저장 배열의 길이와 $ INC와 $ 푸시 조작에 의해 그것을 유지.
-
==============================
6.내가 배열 크기를 조회하고 0보다 큰했지만 1-3에서 아무것도 할 수 있다면 반환 할 필요 나는 주위에 작은 일을했다.
내가 배열 크기를 조회하고 0보다 큰했지만 1-3에서 아무것도 할 수 있다면 반환 할 필요 나는 주위에 작은 일을했다.
여기 내 솔루션했다 :
db.test.find($or : [{$field : { $exists : true, $size : 1}}, {$field : { $exists : true, $size : 2}}, {$field : { $exists : true, $size : 3}}, ])
속성이 존재하고 크기가 특정 크기 또는 범위 내에서 찾는 경우 1, 2, 3. 사용자는 더 문 및 증분을 추가 할 수 있습니다 때 이것은 기본적으로 문서를 반환합니다. 나는 그것의 완벽하지 알고 있지만 일을했고, 상대적으로 빨랐다. 이 솔루션이 일 때문에 나는 단지 내 특성에 1-3 크기를했다.
from https://stackoverflow.com/questions/6722850/querying-internal-array-size-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 업데이트에 변수를 사용하여 (0) | 2019.12.02 |
---|---|
[MONGODB] 몽구스 자동 증가 (0) | 2019.12.02 |
[MONGODB] mongoError : 토폴로지는 파괴되었다 (0) | 2019.12.02 |
[MONGODB] 중첩 배열 내에 만 유사한 하위 문서 엘리먼트를 반환 (0) | 2019.12.02 |
[MONGODB] MongoDB를 데이터베이스 파일 크기를 감소 (0) | 2019.12.02 |