programing

Mongoose로 기존 컬렉션에 접속하려면 어떻게 해야 하나요?

skycolor 2023. 3. 28. 21:29
반응형

Mongoose로 기존 컬렉션에 접속하려면 어떻게 해야 하나요?

는 300파운드의 있다.question " " " "test이 컬렉션은 MongoDB 인터랙티브셸을 통해 쉽게 조작할 수 있지만 express.js 어플리케이션에서 Mongoose를 통해 컬렉션을 가져오려고 하면 빈 배열이 나타납니다.

궁금한 점은 기존 데이터 세트를 express로 재생성하지 않고 어떻게 액세스할 수 있는가 하는 것입니다.다음은 코드입니다.

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/test');
mongoose.model('question', new Schema({ url: String, text: String, id: Number }));

var questions = mongoose.model('question');
questions.find({}, function(err, data) { console.log(err, data, data.length); });

출력은 다음과 같습니다.

null [] 0

Mongoose는 모델을 선언할 때 스키마 아래에 컬렉션 이름을 지정하거나 세 번째 인수로 지정하는 기능을 추가했습니다.그렇지 않으면 모델에 매핑한 이름으로 지정된 다중 버전이 사용됩니다.

다음과 같이 스키마 매핑을 시도합니다.

new Schema({ url: String, text: String, id: Number}, 
           { collection : 'question' });   // collection name

또는 모델 매핑:

mongoose.model('Question', 
               new Schema({ url: String, text: String, id: Number}), 
               'question');     // collection name

간단한 복사 붙여넣기 추가 기능을 원하는 사람이 있다면 Will Nathan의 답변을 요약하면 다음과 같습니다.

function find (name, query, cb) {
    mongoose.connection.db.collection(name, function (err, collection) {
       collection.find(query).toArray(cb);
   });
}

하다find(collection_name, query, callback);결과를 얻을 수 있습니다.

예를 들어, 컬렉션 'foo'에 문서 {a : 1 }이(가) 있고 해당 속성을 나열하려면 다음을 수행합니다.

find('foo', {a : 1}, function (err, docs) {
            console.dir(docs);
        });
//output: [ { _id: 4e22118fb83406f66a159da5, a: 1 } ]

mongoose의 네이티브 mongodb 함수에 접속하는 것보다 다음과 같은 작업을 할 수 있습니다.

var mongoose = require("mongoose");
mongoose.connect('mongodb://localhost/local');

var connection = mongoose.connection;

connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', function () {

    connection.db.collection("YourCollectionName", function(err, collection){
        collection.find({}).toArray(function(err, data){
            console.log(data); // it will print your collection data
        })
    });

});

업데이트 2022

에 ''가요.MongoInvalidArgumentError: The callback form of this helper has been removed. 에러 메시지, 에러 메시지, 에러 메시지, 에러 메시지, 에러 입니다.async/await:

const mongoose = require("mongoose");
mongoose.connect('mongodb://localhost/productsDB');

const connection = mongoose.connection;

connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', async function () {

  const collection  = connection.db.collection("Products");
  collection.find({}).toArray(function(err, data){
      console.log(data); // it will print your collection data
  });

});

저도 같은 문제가 있어서 아래 코드로 기존 Mongoose 연결을 사용하여 스키마 없는 쿼리를 실행할 수 있었습니다.이러한 제약 조건을 추가할 위치를 표시하기 위해 간단한 제약 조건 'a=b'를 추가했습니다.

var action = function (err, collection) {
    // Locate all the entries using find
    collection.find({'a':'b'}).toArray(function(err, results) {
        /* whatever you want to do with the results in node such as the following
             res.render('home', {
                 'title': 'MyTitle',
                 'data': results
             });
        */
    });
};

mongoose.connection.db.collection('question', action);

DB에 연결되었습니까? (지정된 포트가 없기 때문에 물어봅니다.)

시험:

mongoose.connection.on("open", function(){
  console.log("mongodb is connected!!");
});

또한 mongo 쉘에서 "show collections"를 실행하여 db 내의 컬렉션을 확인할 수 있습니다.mongoose를 통해 레코드를 추가하여 최종 결과를 확인할 수 있습니까?

연결 문자열 모양에서 "test" db의 레코드를 볼 수 있습니다.

도움이 됐으면 좋겠다!

적어도 내게는 분명하지 않은 또 다른 것은, 실제 컬렉션을 같은 이름의 새 컬렉션으로 교체하는 것을 피하기 위해 Mongoose의 세 번째 파라미터를 사용할 때,new Schema(...)홀더일

var User = mongoose.model('User', new Schema({ url: String, text: String, id: Number}, { collection : 'users' }));   // collection name;
User.find({}, function(err, data) { console.log(err, data, data.length);});

실제 (리모트) 스키마에 이러한 필드가 포함되어 있지 않은 경우에도 정상적으로 작동하고 모든 필드를 반환합니다. 될 것이다.new Schema(...)변수로는 해킹할 수 없습니다.

MongoDB 웹사이트에 접속하여 [Login]> [ Connect ]> [ Connect Application ]> [ Copy ]> [ Paste in ' database _ url ]> [ Collections ]> [ Copy / Paste in ' collection ]으로 이동합니다.

var mongoose = require("mongoose");
mongoose.connect(' database_url ');
var conn = mongoose.connection;
conn.on('error', console.error.bind(console, 'connection error:'));
conn.once('open', function () {
  conn.db.collection(" collection ", function(err, collection){
    collection.find({}).toArray(function(err, data){
      console.log(data); // data printed in console
    })
  });
});

나는 모든 답을 시도해 보았지만 아무 것도 되지 않았고, 마침내 그것을 할 수 있는 정답을 얻었다.

var mongoose = require('mongoose');
mongoose.connect('mongodb://0.0.0.0:27017/local');

// let model = require('./test1');

setTimeout(async () => {
  
    let coll = mongoose.connection.db.collection(<Your collection name in plural form>);
    // let data = await coll.find({}, {limit:2}).toArray();
    // let data = await coll.find({name:"Vishal"}, {limit:2}).toArray();
    // let data = await coll.find({name:"Vishal"}, {projection:{player:1, _id:0}}).toArray();
    let data = await coll.find({}, {limit:3, sort:{name:-1}}).toArray();
    console.log(data);
    
}, 2000);

나는 또한 걸러낼 기준들 중 몇 가지를 언급했다.이를 통해 삭제 및 업데이트를 수행할 수도 있습니다.

감사해요.

데이터베이스 내의 올바른 컬렉션뿐만 아니라 올바른 데이터베이스에도 연결되어 있는지 확인합니다.

연결 문자열에 데이터베이스 이름을 포함할 수 있습니다.

공지databasename다음 연결 문자열로 지정합니다.

var mongoose = require('mongoose');
const connectionString = 'mongodb+srv://username:password@hosturl.net/databasename';

mongoose.connect(connectionString);

언급URL : https://stackoverflow.com/questions/5794834/how-to-access-a-preexisting-collection-with-mongoose

반응형