programing

Node.js - Mongoose - 컬렉션이 있는지 확인합니다.

telebox 2023. 7. 6. 22:08
반응형

Node.js - Mongoose - 컬렉션이 있는지 확인합니다.

mongoose를 사용하여 데이터를 삽입해야 하는데, 삽입 시 사용자가 컬렉션 이름을 제공하기 때문에 먼저 컬렉션이 있는지 확인해야 합니다.

컬렉션이 있는지 확인하는 방법은 다음을 쿼리하는 것입니다.system.namespaces수집.저는 그것에 대한 세 가지 가능한 접근법을 볼 수 있습니다.

  1. 쿼리 방법 찾기system.namespacesmongoose(db의 스키마와 일치하는 스키마를 정의할 수 있음)를 사용합니다.
  2. mongoose에서 기본 노드-mongodb-native 개체를 가져와 쿼리를 수동으로 수행합니다.어쨌든, 이것은 제가 배우고 싶은 것입니다.
  3. 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

반응형