mongoose에서 스키마를 전달하지 않고 컬렉션 쿼리
컬렉션을 쿼리하려면 다음을 수행해야 합니다.
var mongoose = require("mongoose");
mongoose.connect();
var db = mongoose.connection;
db.on('open', function callback () {
var kittySchema = mongoose.Schema({
name: String
})
var Kitten = mongoose.model('Kitten', kittySchema)
Kitten.find(function (err, kittens) {
console.log(kittens);
})
});
고양이 컬렉션이 이미 있는 경우에도 매번 스키마를 지정해야 합니까?
왜 나는 할 수 없는 거지?db.Kittens.find()
?
Mongoose 홈 페이지에서:
Mongoose는 애플리케이션 데이터를 모델링하기 위한 간단한 스키마 기반 솔루션을 제공하며, 즉시 사용할 수 있는 내장형 유형 캐스팅, 검증, 쿼리 작성, 비즈니스 로직 후크 등을 포함합니다.
Mongoose는 고유할 수 있는 문서 모음에서 스키마를 유추할 수 없습니다.MongoDB는 컬렉션에 저장된 문서에 스키마를 적용하지 않습니다.
따라서 Mongoose는 NodeJS 네이티브 드라이버(여기에)에 계층을 추가하여 많은 사람들이 생산성을 향상시킵니다.노드를 사용할 때 MongoDB와 함께 사용할 필요는 없습니다.제이에스
Mongoose가 작동하려면 기본적으로 두 가지가 필요합니다.
- 스키마 == 문서 구조(참조)를 정의합니다.유효성 검사, 새 메서드를 추가하고, 가상 속성을 추가하고, 데이터 유형을 사용하고, 다른 컬렉션(모델)에 대한 참조를 설정할 수 있습니다.
- Model == 이 클래스는 런타임에 컬렉션(참조)에 대한 쿼리를 표현하는 데 사용됩니다.스키마 정의는 모델을 작성하는 데 사용됩니다.
그래서, 당신이 붙여준 샘플에서 보았듯이, 고양이가 있습니다.Schema
, 된다음의정다.Model
Kitten
할 때 점은 입니다.스키마와 모델을 사용할 때 좋은 점은 Mongoose가 사용 가능한 속성/필드를 적용한다는 것입니다.
만 합니다.Schema
모래땅Model
신청서에 한 번.따라서 일반적으로 응용 프로그램이 시작되면 코드를 실행하여 정의한 다음Model
애플리케이션 라이프사이클 전반에 걸쳐 필요한 인스턴스.
Mongoose를 잠재적으로 사용하려는 이유는 더 많습니다.
물론 맞습니다. NodeJS 네이티브 드라이버를 사용하면 스키마 없이 좀 더 직접적인 것을 사용할 수 있습니다.구문은 표시된 것과 비슷하지만 좀 더 복잡합니다.
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
if(err) { return console.dir(err); }
var collection = db.collection('kittens');
collection.find().toArray(function(err, kittens) {
// here ...
});
});
단순한 것보다는:
Kitten.find(function(err, kittens) {
});
또한 Mongoose를 사용하면 더 복잡한 쿼리를 작성하는 것이 더 쉽고 읽기 쉽다는 것을 알 수 있습니다.
Kitten.find().where('name', 'Harold').exec(/*callback*/);
프레임워크를 더 잘 이해하고 필요에 적합한지 여부를 확인하기 위해 문서를 더 읽어보는 것이 좋습니다.문서는 유감스럽게도 약간 흩어져 있지만, 만약 당신이 아래의 제목들을 훑어본다면.Guide
제목, 당신은 많은 좋은 정보를 얻을 수 있을 것입니다.
이것을 시도해 보세요.
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ProductSchema = new Schema({}, { strict: false });
const Product = mongoose.model('Product', ProductSchema, 'products');
module.exports = { Product };
스키마가 없으면 Mongoose를 사용할 수 없습니다.스키마 없이 MongoDB를 사용하고 싶다면 Mongoose를 사용하지 말고 mongodb와 같은 것을 사용합니다.
IMO, 스키마가 필요하지 않으면 사용할 수 있습니다.mongodb-nodejs
기사님!
하지만 어떤 경우에는:
- 저장소에서 스키마를 유지 관리하지 않고 mongoose 추가 기능을 사용하는 경우(또는)
- 기존 스키마를 사용하거나 큰 저장소의 코드 조각/장소에 새 스키마를 만들고 싶지 않습니다.
따라서 mongoDB를 사용하는 동안 mongoDB를 쿼리/쓰기하기 위해 스키마를 만들 필요가 없습니다. 아래 코드는 mongoose를 사용하여 연결을 만들지만 DB를 쿼리하기 위해 스키마가 필요하지 않습니다!
참고: mongoose 버전 < 6:
mongoose.connection.db.collection('collectionName', (err, collection) => {
collection.find({}, {}, (err, document) => { /** .... */ })
})
몽구스 버전 6은 2021년 말에 출시되었으며 최신 버전은 더 많은 기능을 제공할 것이기 때문에 사용하는 것이 더 좋습니다(만약 당신이 v6가 필요하다면 당신은 v6가 반드시 필요할 것입니다.mongoDB
서버는 >5.0
그러나 mongoDB 서버 버전이 < 5.0.REF.:mongoose-mongoDB-version-compatibility)인 경우에는 필요하지 않습니다.
참고: 위 코드가 mongoose 버전에서 작동하지 않는 이유 > 6: mongoose 내부 사용mongoDB-nodejs
mongoDB 서버와 대화할 드라이버. mongoose 버전 > 6개 가져오기mongoDB-nodejs
위의 코드가 더 이상 지원되지 않지만 대안이 존재하는 드라이버 버전 > 4. 참조. : 이슈-보고서/티켓
사용된 키워드:
mongoDB 서버:실제 Mongo 데이터베이스 서버입니다.
mongodb-nodejs 드라이버: 노드에서 mongoDB 서버와 통신하는 데 사용할 수 있는 mongodb nodejs 드라이버.Js.
몽구스:Mongoose는 nodejs(no-SQL mongoDB 만들기, 스키마 기반)를 통해 mongoDB에 액세스하기 위한 ODM(오브젝트 데이터 모델링) 라이브러리입니다.
// With model
const model = await conn.model(modelName, schema, collectionName)
const documents = (await model.find({})).map(doc => doc._doc)
// Without model
const documents = await conn.db.collection('Apple').find().toArray()
언급URL : https://stackoverflow.com/questions/21429630/querying-a-collection-without-passing-schema-in-mongoose
'source' 카테고리의 다른 글
Windows 인증을 사용하여 SQL 연금술을 통해 SQL Server에 연결하는 방법은 무엇입니까? (0) | 2023.07.05 |
---|---|
참조 해제 유형이 실행된 포인터는 엄격한 별칭 규칙을 위반합니다. (0) | 2023.07.05 |
"참조" 권한이 필요한 이유는 무엇입니까? (0) | 2023.07.05 |
한 번에 여러 개의 물건을 한 줄에 하나씩 인쇄하려면 어떻게 해야 합니까? (0) | 2023.07.05 |
mariadb에서 데이터 디렉토리 변경 (0) | 2023.07.05 |