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
'programing' 카테고리의 다른 글
첫 번째와 두 번째 최대 수를 찾는 방법은 무엇입니까? (0) | 2023.07.02 |
---|---|
boto3를 사용하여 S3 객체에 파일 또는 데이터를 쓰는 방법 (0) | 2023.07.02 |
Mongodb 폴더에 대한 읽기/쓰기 권한 설정 (0) | 2023.06.27 |
UIPageView 컨트롤러의 스와이프 제스처를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.06.27 |
Java를 통해 MongoDB에 여러 문서를 한 번에 삽입하는 방법 (0) | 2023.06.27 |