programing

MongoDB에서 내부 어레이 크기를 쿼리하는 중

lastcode 2023. 6. 1. 22:46
반응형

MongoDB에서 내부 어레이 크기를 쿼리하는 중

의 MongoDB 문서를 고려합니다.users컬렉션:

{ username : 'Alex', tags: ['C#', 'Java', 'C++'] }

길이를 알 수 있는 방법이 있습니까?tags(클라이언트에게 태그를 전달하지 않고) 서버 측에서 배열하시겠습니까?

감사해요!

사용자 이름 Alex가 고유한 경우 다음 코드를 사용할 수 있습니다.

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 }

이제 MongoDB(2.6 릴리즈)는 $size집계 작업

설명서에서 다음을 참조하십시오.

{ <field>: { $size: <array> } }

다음 중 하나를 사용하여 원하는 작업을 수행할 수 있습니다.

db.users.aggregate(
   [
      {
         $group: {
            _id: "$username",
            tags_count:  {$first: {$size: "$tags" }}
         }
      }
   ]
)

또는

db.users.aggregate(
   [
      {
         $project: {
            tags_count: {$size: "$tags"}
         }
      }
   ]
)

$inc를 사용하거나 일정에 따라 작업을 통해 각 저장(별도 필드)의 태그 수를 계산하는 것이 더 효율적일 수 있다고 생각합니다.

지도/축소(표준 예제)로도 이 작업을 수행할 수 있지만 원하는 것은 아닌 것 같습니다.

요청하신 대로 정확히 할 수 있을지는 모르겠지만, $size로 특정 크기와 일치하는 모든 문서를 조회할 수 있습니다.

> db.collection.find({ tags : { $size: 3 }});

그러면 3개의 태그가 있는 모든 문서를 얻을 수 있습니다.

xmm.dev의 답변은 단순화할 수 있습니다. 용어 필드 'count' 대신 $group:

db.test.aggregate(
  {$match: {username : "Alex"}}, 
  {$unwind: "$tags"},
  {$group: {_id: null, number: {$sum: 1 }}}
) 

현재, 그것을 할 수 있는 유일한 방법은db.eval그러나 다른 작업을 위해 데이터베이스를 잠급니다.

가장 속도 효율적인 방법은 배열 길이를 저장하는 추가 필드를 추가하고 $inc 및 $push 작업을 통해 이를 유지하는 것입니다.

어레이 크기를 쿼리하고 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개의 크기밖에 없었기 때문에 이 솔루션이 작동했습니다.

언급URL : https://stackoverflow.com/questions/6722850/querying-internal-array-size-in-mongodb

반응형