Node.js - Mongoose - 컬렉션이 있는지 확인합니다.
mongoose를 사용하여 데이터를 삽입해야 하는데, 삽입 시 사용자가 컬렉션 이름을 제공하기 때문에 먼저 컬렉션이 있는지 확인해야 합니다.
컬렉션이 있는지 확인하는 방법은 다음을 쿼리하는 것입니다.system.namespaces
수집.저는 그것에 대한 세 가지 가능한 접근법을 볼 수 있습니다.
- 쿼리 방법 찾기
system.namespaces
mongoose(db의 스키마와 일치하는 스키마를 정의할 수 있음)를 사용합니다. - mongoose에서 기본 노드-mongodb-native 개체를 가져와 쿼리를 수동으로 수행합니다.어쨌든, 이것은 제가 배우고 싶은 것입니다.
- node-mongodb-native(또는 다른 드라이버)의 별도 인스턴스를 사용하여 쿼리 수행
번호3
가장 우아하지 않고 제가 피하려고 하는 것입니다. mongoose가 이미 드라이버를 만들었을 때 드라이버의 다른 인스턴스를 로드하거나 새 연결을 만들고 싶지 않습니다.
번호를 써보겠습니다.1
이 글을 쓴 후에방금 확인했습니다.system.namespaces
그리고 스키마는 꽤 간단해 보입니다.
저는 여전히 몇 가지 의견을 듣고 싶습니다.
감사합니다!
옵션 2가 가장 깨끗할 것입니다.당신이 몽구스를 가지고 있다고 가정할 때Connection
이름이 지정된 개체conn
다음을 사용하여 열려 있습니다.mongoose.createConnection
당신은 네이티브 몽고에 접속할 수 있습니다.Db
을 통한 반대.conn.db
여기서 원하는 항목을 제공하는 전화를 걸 수 있습니다.
conn.db.collectionNames(function (err, names) {
// names contains an array of objects that contain the collection names
});
컬렉션 이름을 매개 변수로 전달할 수도 있습니다.collectionNames
결과를 원하는 대로 필터링할 수 있습니다.
Mongoose 4.x 업데이트
Mongoose 4.x가 사용하는 MongoDB 네이티브 드라이버 2.x 버전에서는collectionNames
은 에서 필터를 수락하고 커서를 반환하는 것으로 대체되었으므로 다음과 같이 수행할 수 있습니다.
mongoose.connection.db.listCollections({name: 'mycollectionname'})
.next(function(err, collinfo) {
if (collinfo) {
// The collection exists
}
});
이 기능은 다음과 같습니다(mongoose 버전 5.1.1).
const mongoose = require('mongoose');
const mongoURI = 'mongodb://localhost:27017/mydb'
// notice the mongoose.createConnection instead of mongoose.connect
const conn = mongoose.createConnection(mongoURI);
conn.on('open', function () {
conn.db.listCollections().toArray(function (err, collectionNames) {
if (err) {
console.log(err);
return;
}
console.log(collectionNames);
conn.close();
});
});
여기 다른 옵션이 있습니다(조금만 사용하면).express
하지만 그것 없이도 잘 작동한다고 생각합니다) 그것은 저에게 효과가 있었습니다.모형을 가져왔다고 가정합니다.그리고, 예를 들면,Blog
모델의 이름입니다.
const app = express();
const Blog = require('./models/blog');
app.post('/example', (req, res) => {
Blog.findOne({name: 'collectionname'})
.then(result => {
if(result) {
//If it exists
}
})
})
'''
그result
둘 중 하나입니다.null
또는object
.
컬렉션 목록에서 컬렉션 찾기
public function CollectionExists($collectionName)
{
$mongo = new Mongo();
$collectionArr = $mongo->selectDB('yourrec')->listCollections();
if (in_array($collectionName, $collectionArr)) {
return true;
}
return false;
}
언급URL : https://stackoverflow.com/questions/13444876/node-js-mongoose-check-if-a-collection-exists
'programing' 카테고리의 다른 글
프로파일 값을 할당하는 방법은 무엇입니까? (0) | 2023.07.06 |
---|---|
IPthon 노트북에서 대화형 matplotlib 창을 열려면 어떻게 해야 합니까? (0) | 2023.07.06 |
여러 안드로이드 애플리케이션이 동일한 파이어베이스 데이터베이스에 액세스할 수 있습니까? (0) | 2023.07.06 |
ELMAH를 사용한 WCF 서비스에 대한 예외 로깅 (0) | 2023.07.06 |
Postgresql: 암호를 사용하여 psql 실행 스크립팅 (0) | 2023.07.06 |