복붙노트

[MONGODB] 어떻게 몽구스와 기존 모음에 액세스 할 수?

MONGODB

어떻게 몽구스와 기존 모음에 액세스 할 수?

나는 데이터베이스 시험에서 300 개 질문 개체의 큰 컬렉션을 가지고있다. 나는 MongoDB를의 대화 형 쉘을 통해 쉽게 수집과 상호 작용할 수 있습니다; 내가 express.js 응용 프로그램에서 몽구스를 통해 컬렉션을 취득 할 때 그러나, 나는 하늘의 배열을 얻는다.

내 질문은 어떻게 표현에서 그것을 다시 대신이 이미 존재하는 데이터 세트를 액세스 할 수있다? 여기에 몇 가지 코드는 :

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

해결법

  1. ==============================

    1.몽구스는 스키마에서 컬렉션 이름을 지정할 수있는 기능을 추가, 또는 세 번째 인수로 모델을 선언 할 때. 그렇지 않으면 당신이 모델에 매핑 이름으로 주어진 복수로 버전을 사용합니다.

    몽구스는 스키마에서 컬렉션 이름을 지정할 수있는 기능을 추가, 또는 세 번째 인수로 모델을 선언 할 때. 그렇지 않으면 당신이 모델에 매핑 이름으로 주어진 복수로 버전을 사용합니다.

    다음과 같이, 하나 스키마 매핑을 시도해보십시오

    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
    
  2. ==============================

    2.사람이 그냥 쉽게 복사 - 붙여 넣기가 추가 기능을 원하는 경우 여기에 윌 나단의 대답의 추상화입니다 :

    사람이 그냥 쉽게 복사 - 붙여 넣기가 추가 기능을 원하는 경우 여기에 윌 나단의 대답의 추상화입니다 :

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

    간단하게 (COLLECTION_NAME, 쿼리, 콜백) 찾을 수 있습니까; 결과를 제공한다.

    예를 들어, 내가 문서가있는 경우 : 콜렉션 '갑'의 {1}을 (를) 내가 속성을 나열 할, 내가 이렇게 :

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

    3.당신은 몽구스 내부의 기본 MongoDB의 기능에 액세스 할 수 있습니다보다 당신은 같은 것을 할 수 있습니다 :

    당신은 몽구스 내부의 기본 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
            })
        });
    
    });
    
  4. ==============================

    4.저도 같은 문제를 겪고 아래 코드와 기존의 몽구스 연결을 사용하여 스키마없는 쿼리를 실행할 수 있었다. 나는 간단한 제약 조건을 추가 한 'A = B'는 이러한 제약 조건을 추가 할 위치를 표시하려면

    저도 같은 문제를 겪고 아래 코드와 기존의 몽구스 연결을 사용하여 스키마없는 쿼리를 실행할 수 있었다. 나는 간단한 제약 조건을 추가 한 '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);
    
  5. ==============================

    5.당신은 DB에 연결했는지 확인하고 있습니까? (나는 포트가 지정 표시되지 않습니다 때문에 문의)

    당신은 DB에 연결했는지 확인하고 있습니까? (나는 포트가 지정 표시되지 않습니다 때문에 문의)

    시험:

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

    또한, 당신은 몽고 쉘에 "쇼 컬렉션"당신의 DB 내에서 컬렉션을보기 위해 할 수있는 - 어쩌면 몽구스를 통해 레코드를 추가하려고하고 끝 어디에 있는지?

    연결 문자열의 모양에서, 당신은 "테스트"DB에 기록을 볼 수 있습니다.

    희망이 도움이!

  6. ==============================

    6.적어도 나에게 분명 아니었다 뭔가 다른, 같은 이름의 새 것으로 실제 수집을 교체하는 일이 없도록 몽구스의 세 번째 매개 변수를 사용하는 경우는, 새로운 스키마 (...)이 실제로 단지 자리라고했고, 대한 기존 스키마 그렇게 방해하지 않는

    적어도 나에게 분명 아니었다 뭔가 다른, 같은 이름의 새 것으로 실제 수집을 교체하는 일이 없도록 몽구스의 세 번째 매개 변수를 사용하는 경우는, 새로운 스키마 (...)이 실제로 단지 자리라고했고, 대한 기존 스키마 그렇게 방해하지 않는

    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);});
    

    잘 작동하고 모든 필드를 반환합니다 - 실제가 (원격) 스키마이 필드도 포함되어 있지 않습니다 경우에도 마찬가지입니다. 몽구스는 여전히 새로운 스키마 (...)으로 원하는 것, 그리고 변수는 거의 확실하게 해킹하지 않습니다.

  7. from https://stackoverflow.com/questions/5794834/how-to-access-a-preexisting-collection-with-mongoose by cc-by-sa and MIT license