programing

MongoDB: 문서에서 키 수를 세는 방법은 무엇입니까?

cafebook 2023. 6. 27. 23:39
반응형

MongoDB: 문서에서 키 수를 세는 방법은 무엇입니까?

문서가 다음과 같다고 가정합니다.

{

a: 1,
b: 1,
c: 2,
 ....
z: 2
}

이러한 문서에서 키 수를 계산하려면 어떻게 해야 합니까?

감사해요.

집계 프레임워크를 통해 MongoDB 3.6 이상을 사용하는 경우 상당히 가능합니다.문서를 배열로 변환하려면 집계 파이프라인 내의 연산자를 사용합니다.반환 배열은 원본 문서의 각 필드/값 쌍에 대한 요소를 포함합니다.반환 배열의 각 요소는 두 개의 필드를 포함하는 문서입니다.k그리고.v.

문서 루트에 대한 참조는 집계 파이프라인 단계에서 현재 처리 중인 최상위 문서를 참조하는 시스템 변수를 통해 가능합니다.

그런 다음 배열을 가져올 때 파이프라인 단계를 사용하여 카운트를 포함하는 필드를 생성할 수 있으며 실제 카운트는 연산자를 사용하여 파생됩니다.

이 모든 작업은 다음과 같이 식을 중첩하여 단일 파이프라인에서 수행할 수 있습니다.

db.collection.aggregate([
    { "$addFields": {
        "count": {
            "$size": { 
                "$objectToArray": "$$ROOT"
            }
        }
    } }     
])

출력 예제

{
    "_id" : ObjectId("5a7cd94520a31e44e0e7e282"),
    "a" : 1.0,
    "b" : 1.0,
    "c" : 2.0,
    "z" : 2.0,
    "count" : 5
}

제외하기_id필드에서 연산자를 다음과 같이 사용할 수 있습니다.

db.collection.aggregate([
    {
        "$addFields": {
            "count": {
                "$size": { 
                    "$filter": {
                        "input": { "$objectToArray": "$$ROOT" },
                        "as": "el",
                        "cond": { "$ne": [ "$$el.k", "_id" ] }
                    }
                }
            }
        }
    }     
])

또는 0zkr PM이 제안한 대로 처음에 파이프라인 단계를 추가합니다.

db.collection.aggregate([
    { "$project": { "_id": 0 } },
    { "$addFields": {
        "count": {
            "$size": { 
                "$objectToArray": "$$ROOT"
            }
        }
    } }     
])

기본 제공 명령어가 없습니다.이 문서를 가져와서 직접 키를 세어 보십시오.

Mongo(대부분의 NoSQL 솔루션과 마찬가지로)에서 나중에 쿼리를 수행하려면 이러한 값을 미리 계산하는 것이 좋습니다(예: "다른 키 수 > 12"). 따라서 새 키가 추가될 때마다 증가하는 새 필드 "keyCount"를 추가하는 것을 고려해야 할 수 있습니다.

만약 당신이 Mongo 콘솔에 있다면, 당신은 그것을 위해 Javascript를 작성할 수 있습니다.

doc = db.coll.findOne({}); nKeys =0; for( k in doc){nKeys ++;} print(nKeys);

하지만 이것은 여전히 "몽고 밖"으로 간주될 것입니다.

세르히오 말이 맞아요, 몽고 밖에서 해야 해요.

다음과 같은 작업을 수행할 수 있습니다.

var count = 0;
for(k in obj) {count++;}
print(count);
const MongoClient = new require("mongodb").MongoClient(
  "mongodb://localhost:27017",
  {
    useNewUrlParser: true,
    useUnifiedTopology: true
  }
);
(async () => {
  const connection = await MongoClient.connect();
  const dbStuff = await connection
    .db("db")
    .collection("weedmaps.com/brands")
    .find({})
    .toArray();  // <- Chuck all it into an Array
  for (let thing of dbStuff) {
    console.log(Object.keys(thing).length);
  }
  return await connection.close();
})();

몽구스와 같은 문서로 작업하는 경우.문서, 개체를 변환한 후에 문서 내의 모든 키를 셀 수 있습니다. 이는 문서 앞에 공통 속성이 있기 때문입니다.

Object.keys(document); // returns [ '$__', 'isNew', 'errors', '_doc', '$locals' ]
Object.keys(document).length; // returns ALWAYS 5

그래서 객체에 캐스팅을 하고 객체에 전달합니다.열쇠들

console.dir(
    Object.keys(document.toObject()) // Returns ['prop1', 'prop2', 'prop3']
);

키 수를 표시하기 위해

console.log(
    Object.keys(document.toObject().length)
); // Returns 3

그리고 행복해지세요!!!

언급URL : https://stackoverflow.com/questions/8980145/mongodb-how-to-count-number-of-keys-in-a-document

반응형