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
'programing' 카테고리의 다른 글
Angular의 개요JS 및 각도서로 관련된 UI? (0) | 2023.03.28 |
---|---|
Wordpress 사용자 및 사용자 이름 - 한 테이블의 여러 행을 다른 테이블의 한 행에 결합합니다. (0) | 2023.03.28 |
AngularJS를 사용하여 입력 값을 제한하려면 어떻게 해야 합니까? (0) | 2023.03.23 |
CSS의 여러 점/주기 (0) | 2023.03.23 |
TypeScript React 응용 프로그램의 PropType (0) | 2023.03.23 |