Mongo의 컬렉션을 어떻게 설명해야 합니까?
이것은 몽고 DB 학습 3일째 날입니다.난 MySql 우주에서 온...
제가 잘 모르는 MySql 테이블에 대한 쿼리를 작성해야 할 때는 "desc" 명령을 사용합니다. 기본적으로 쿼리에 어떤 필드를 포함해야 하는지 알려줍니다.
몽고브를 위해 제가 어떻게 하겠어요?알아요, 알아요...스키마가 없는 데이터베이스에서 스키마를 검색하는 중입니다.=) 그러나 사용자가 쿼리에서 어떤 필드를 사용해야 하는지 어떻게 알 수 있습니까?
제가 잘못된 방향으로 가고 있는 건가요?분명히 저는 Mongodb에서 MySql 방식을 사용하려고 합니다.몽고 길은 무엇입니까?
편집기/몽고셸에 아래 쿼리 입력
var col_list= db.emp.findOne();
for (var col in col_list) { print (col) ; }
출력은 컬렉션에 있는 열 이름을 제공합니다.
_id
name
salary
여기에는 좋은 답이 없습니다.스키마가 없기 때문에 컬렉션을 '설명'할 수 없습니다.여러 개(대부분?)에서그러나 MongoDb 응용 프로그램은 쓰기 응용 프로그램에 사용되는 개체 계층 구조(java 또는 c# 또는 기타)에 의해 정의되므로 개체 라이브러리를 검토하여 해당 정보를 얻을 수 있습니다.그렇지 않으면 약간의 시행착오가 있습니다.
오늘은 제가 30일째 되는 날입니다. MongoDB를 가지고 노는 것처럼요.안타깝게도 현재 당사의 인프라 문제로 인해 MongoDB와 협력한 후 MySQL로 다시 전환했습니다.그러나 MongoDB와 MySQL 모두에서 동일한 모델을 구현한 결과 이제 차이를 명확하게 알 수 있습니다.
물론 MongoDB와 같은 스키마가 없는 데이터베이스를 다룰 때는 스키마가 포함되지만 스키마는 데이터베이스가 아닌 애플리케이션에 의해 지시됩니다.데이터베이스는 제공되는 모든 것을 밀어넣을 것입니다.관리자가 Mongo에 비밀리에 로그인하여 변경하지 않고 데이터베이스에 대한 모든 액세스가 일부 래퍼를 통해 컨트롤러라는 것을 알고 있는 한 스키마를 확인해야 하는 유일한 위치는 모델 클래스입니다.예를 들어, Rails 애플리케이션에서 Mongo에 있는 두 가지 모델이 있습니다.
class Consumer
include MongoMapper::Document
key :name, String
key :phone_number, String
one :address
end
class Address
include MongoMapper::EmbeddedDocument
key :street, String
key :city, String
key :state, String
key :zip, String
key :state, String
key :country, String
end
이제 MySQL로 전환한 후, 우리의 수업은 다음과 같습니다.
class Consumer < ActiveRecord::Base
has_one :address
end
class Address < ActiveRecord::Base
belongs_to :consumer
end
수업의 간결함에 속지 마세요.MySQL이 포함된 후자의 버전에서는 필드를 데이터베이스에서 직접 꺼냅니다.전자의 예에서, 들판은 바로 우리 눈앞에 있습니다.
MongoDB를 사용하면 특정 모델을 변경해야 하는 경우 클래스 자체의 필드를 추가, 제거 또는 수정하기만 하면 바로 작동합니다.데이터베이스 테이블/열을 클래스 구조와 동기화하는 것에 대해 걱정할 필요가 없습니다.따라서 MongoDB에서 스키마를 찾고 있다면 데이터베이스가 아닌 응용 프로그램에서 답변을 찾으십시오.
본질적으로 저는 @Chris Shain과 정확히 같은 말을 하고 있습니다 :)
사실은 옳지만, 여러분 모두는 이것을 너무 복잡하게 만들고 있습니다.OP는 단지 그/그녀의 데이터가 어떻게 생겼는지 알고 싶어하는 것 같습니다.만약 그렇다면, 당신은 그냥.
db.collectionName.findOne()
이렇게 하면 데이터베이스에 있는 하나의 문서(일명 레코드)가 예쁜 형식으로 표시됩니다.
나도 이런 게 필요했어, 카바촌그래서 저는 Variety라는 오픈 소스 도구를 만들었습니다. 이 도구는 정확히 다음과 같은 기능을 합니다: 링크.
당신이 그것이 유용하다는 것을 알게 되기를 바랍니다.질문이 있거나 사용에 문제가 있으면 알려주세요.
행운을 빕니다.
AFAIK, 방법은 없고 그렇게 하는 것이 논리적입니다.
MongoDB는 스키마가 없는 단일 컬렉션에서 다른 필드를 가진 문서를 가질 수 있습니다.따라서 관계형 데이터베이스의 테이블에 대한 설명과 같은 컬렉션에 대한 설명은 있을 수 없습니다.
이 경우에도 대부분의 응용 프로그램은 컬렉션에 대한 스키마를 유지 관리하며 Chris의 말처럼 응용 프로그램에서 이 스키마를 적용합니다.
따라서 먼저 사용 가능한 키를 가져와 쿼리를 수행할 필요가 없습니다.MongoDB에 임의의 키 집합(즉, 쿼리의 투영 부분)을 요청하거나 임의의 키 집합에 대해 쿼리할 수 있습니다.두 경우 모두 지정된 키가 문서에 있는 경우 사용되고 그렇지 않은 경우에는 사용되지 않습니다.오류가 발생하지 않습니다.
예를 들어 (몽고 쉘에서):
가 귀하의 이가샘경에 people
컬렉션과 모든 문서가 동일한 스키마를 따릅니다.
{
name : "My Name"
place : "My Place"
city : "My City"
}
다음은 완벽하게 유효한 쿼리입니다.
이 두 사람은 위의 문서를 반환합니다.
db.people.find({name : "My Name"})
db.people.find({name : "My Name"}, {name : 1, place :1})
이렇게 하면 아무 것도 반환되지 않지만 다음과 같은 오류도 발생하지 않습니다.
db.people.find({first_name : "My Name"})
위의 문서와 일치하지만 반환된 문서에는 기본 "_id" 속성만 있습니다.
db.people.find({name : "My Name"}, {first_name : 1, location :1})
print('\n--->', Object.getOwnPropertyNames(db.users.findOne())
.toString()
.replace(/,/g, '\n---> ') + '\n');
---> _id
---> firstName
---> lastName
---> email
---> password
---> terms
---> confirmed
---> userAgent
---> createdAt
이것은 정확한 유형을 제공하지 않기 때문에 불완전한 솔루션이지만 빠른 보기에 유용합니다.
const doc = db.collectionName.findOne();
for (x in doc) {
print(`${x}: ${typeof doc[x]}`)
};
지도 / 축소를 실행해도 괜찮으면 가능한 모든 문서 필드를 수집할 수 있습니다.
이 게시물부터 시작하세요.
여기서 유일한 문제는 리소스를 많이 사용할 수 있는 맵/축소를 실행하고 있다는 것입니다.대신 다른 사람들이 제안한 것처럼 실제 데이터를 쓰는 코드를 보고 싶을 것입니다.
데이터베이스에 스키마가 없다고 해서 스키마가 없는 것은 아닙니다.일반적으로 스키마 정보는 코드에 포함됩니다.
당신에게 도움이 될만한 작은 몽고 쉘 스크립트를 작성했습니다.https://gist.github.com/hkasera/9386709
도움이 된다면 알려주세요.
mongoDb에 UI 도구 mongo 나침반을 사용할 수 있습니다.그러면 해당 컬렉션의 모든 필드가 표시되고 해당 컬렉션의 데이터 변동도 표시됩니다.
만약 당신이 NodeJS를 사용하고 있고 API 요청을 사용하여 모든 필드 이름을 얻고 싶다면, 이 코드는 저에게 적합합니다.
let arrayResult = [];
db.findOne().exec(function (err, docs)){
if(err)
//show error
const JSONobj = JSON.parse(JSON.stringify(docs));
for(let key in JSONobj) {
arrayResult.push(key);
}
return callback(null, arrayResult);
}
arrayResult는 전체 필드/열 이름을 제공합니다.
출력-
[
"_id",
"emp_id",
"emp_type",
"emp_status",
"emp_payment"
]
이것이 당신에게 효과가 있기를 바랍니다!
사람이라는 이름의 컬렉션이 있고 필드와 데이터 유형을 찾고 싶다고 생각해 보십시오.아래 쿼리를 사용할 수 있습니다.
function printSchema(obj) {
for (var key in obj) {
print( key, typeof obj[key]) ;
}
};
var obj = db.people.findOne();
printSchema(obj)
이 쿼리의 결과는 아래와 같습니다.
개체를 사용할 수 있습니다.JavaScript와 같은 키
Object.keys(db.movies.findOne())
언급URL : https://stackoverflow.com/questions/6336973/how-do-i-describe-a-collection-in-mongo
'programing' 카테고리의 다른 글
c#을 사용하여 엑셀 파일에서 데이터를 읽는 방법 (0) | 2023.05.13 |
---|---|
python에서 xlsxwriter를 사용하여 기존 XLSX 워크북의 셀에 데이터 쓰기/업데이트하는 방법 (0) | 2023.05.13 |
PostgreSQL 추가 출력 사용 안 함 (0) | 2023.05.13 |
로컬 Git 저장소가 원래 복제된 URL을 확인하는 방법 (0) | 2023.05.13 |
요소를 배열의 시작 부분으로 푸시하는 가장 쉬운 방법은 무엇입니까? (0) | 2023.05.13 |