[MONGODB] Meteor.js와 여러 MongoDB의 데이터베이스를 사용하여
MONGODBMeteor.js와 여러 MongoDB의 데이터베이스를 사용하여
그것은 2 개 개의 다른 MongoDB를 데이터베이스 서버에서 데이터를 검색 할 2 Meteor.Collections 수 있습니까?
Dogs = Meteor.Collection('dogs') // mongodb://192.168.1.123:27017/dogs
Cats = Meteor.Collection('cats') // mongodb://192.168.1.124:27017/cats
해결법
-
==============================
1.원격 / 여러 데이터베이스에 연결하는 것이 가능합니다 :
원격 / 여러 데이터베이스에 연결하는 것이 가능합니다 :
var database = new MongoInternals.RemoteCollectionDriver("<mongo url>"); MyCollection = new Mongo.Collection("collection_name", { _driver: database });
여기서
는 MongoDB를 URL 등 MongoDB를 같은 : //127.0.0.1 : 27017 / 유성 (데이터베이스 이름) 현재이 하나의 단점이있다 : 없음 Oplog
현재이 불가능합니다. 각 유성 응용 프로그램은 하나의 데이터베이스에 바인딩됩니다.
거기 당신이 주위에 얻을 수있는 몇 가지 방법이 있습니다하지만 더 그 가치 있음을 복잡하게 할 수있다 :
다른 유성 응용 프로그램에서 (예를 동일한 시스템에 포트 6000에서 실행). 당신은 여전히 반응성을 가질 수 있지만 메서드 호출을 통해 프록시 삽입, 제거하고 업데이트 필요
섬기는 사람:
Cats = Meteor.Collection('cats') Meteor.publish("cats", function() { return Cats.find(); }); Meteor.methods('updateCat, function(id, changes) { Cats.update({_id: id}, {$set:changes}); });
현재 유성 응용 프로그램 :
var connection = DDP.connect("http://localhost:6000"); connection.subscribe("cats"); Cats = Meteor.Collection('cats', {connection: connection}); //To update a collection Cats.call("updateCat", <cat_id>, <changes);
이 노드 JS 네이티브 드라이버를 MongoDB를 사용합니다.
이것은 당신이 다른 노드 JS 응용 프로그램에서하는 것처럼 데이터베이스에 연결됩니다.
이 가능한 반응성이 없으며 새 Meteor.Collection 형식의 컬렉션을 사용할 수 없습니다.
var mongodb = Npm.require("mongodb"); //or var mongodb = Meteor.require("mongodb") //if you use npm package on atmosphere var db = mongodb.Db; var mongoclient = mongodb.MongoClient; var Server = mongodb.Server; var db_connection = new Db('cats', new Server("127.0.0.1", 27017, {auto_reconnect: false, poolSize: 4}), {w:0, native_parser: false}); db.open(function(err, db) { //Connected to db 'cats' db.authenticate('<db username>', '<db password>', function(err, result) { //Can do queries here db.close(); }); });
-
==============================
2.이것은 내부 인터페이스를 사용하여, 실제로 가능하다 :
이것은 내부 인터페이스를 사용하여, 실제로 가능하다 :
var d = new MongoInternals.RemoteCollectionDriver("<mongo url>"); C = new Mongo.Collection("<collection name>", { _driver: d });
-
==============================
3.대답은 YES이다 : 그것은 다른 mongdb 데이터베이스 서버에서 데이터를 검색 할 여러 Meteor.Collections까지 가능 세트입니다.
대답은 YES이다 : 그것은 다른 mongdb 데이터베이스 서버에서 데이터를 검색 할 여러 Meteor.Collections까지 가능 세트입니다.
@Akshat에서 답으로, 당신은 Mongo.Collections를 생성 할 수있는 자신의 MongoInternals.RemoteCollectionDriver 인스턴스를 초기화 할 수 있습니다.
그러나 여기에 대한 이야기에 더 뭔가. @Akshat 대답에 반대이기 때문에, 나는 Oplog 지원은 여전히 상황에서 사용할 수 있는지 찾을 수 있습니다.
사용자 정의 MongoInternals.RemoteCollectionDriver를 초기화 할 때, Oplog URL을 지정하는 것을 잊지 마십시오 :
var driver = new MongoInternals.RemoteCollectionDriver( "mongodb://localhost:27017/db", { oplogUrl: "mongodb://localhost:27017/local" }); var collection = new Mongo.Collection("Coll", {_driver: driver});
이와 같이, 그것을 Oplog 지원을 활성화하기 매우 간단하다. 당신은 코드의 두 줄 아래에 무슨 일이 있었는지 알고 싶은 경우, 당신은 게시물의 나머지 부분을 계속해서 읽어주십시오.
RemoteCollectionDriver의 생성자에서 기초 MongoConnection가 생성됩니다 :
MongoInternals.RemoteCollectionDriver = function ( mongo_url, options) { var self = this; self.mongo = new MongoConnection(mongo_url, options); };
까다로운 부분이다 : MongoConnection가 oplogUrl가 OplogHandle 초기화한다 제공로 생성하고, 꼬리 Oplog (소스 코드)을 개시하는 경우 :
if (options.oplogUrl && ! Package['disable-oplog']) { self._oplogHandle = new OplogHandle(options.oplogUrl, self.db.databaseName); self._docFetcher = new DocFetcher(self); }
이 블로그 설명했듯이 : Meteor.publish 내부적으로 자동으로 향후 변경이 데이터베이스에서 발생 추적하는 ObserveHandle 인스턴스를 만들 Cursor.observeChanges를 호출합니다.
설문 조사 및-DIFF 전략을 취 기존 PollingObserveDriver 및 OplogObseveDriver, 효율적으로 데이터 변경 사항을 모니터링 할 수 Oplog - 미행을 사용 : 현재 관찰자 드라이버의 두 종류가 있습니다. 적용 할 일을 결정하기 위해, observeChanges는 다음 절차 (소스 코드)를 취합니다
var driverClass = canUseOplog ? OplogObserveDriver : PollingObserveDriver; observeDriver = new driverClass({ cursorDescription: cursorDescription, mongoHandle: self, multiplexer: multiplexer, ordered: ordered, matcher: matcher, // ignored by polling sorter: sorter, // ignored by polling _testOnlyPollCallback: callbacks._testOnlyPollCallback });
canUseOplog 사실 수 있도록하기 위해, 몇 가지 요구 사항이 충족되어야한다. 베어 최소 하나입니다 : 기본 MongoConnection 인스턴스가 유효한 OplogHandle이 있어야합니다. 이 MongoConnection을 만드는 동안 우리가 oplogUrl를 지정해야 정확한 이유입니다
from https://stackoverflow.com/questions/20535755/using-multiple-mongodb-databases-with-meteor-js by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 제한을 사용할 때 MongoDB를 가진 총 문서의 수를 가져옵니다 (0) | 2019.12.02 |
---|---|
[MONGODB] 왜 몽구스는 항상 내 컬렉션 이름의 마지막에 S를 추가 않습니다 (0) | 2019.12.02 |
[MONGODB] 피 경고 true로 useNewUrlParser을 설정하여 "현재의 URL 문자열 파서는 사용되지 않습니다" (0) | 2019.12.02 |
[MONGODB] 수 () 찾아 ()의 차이. COUNT ()하여 MongoDB에서 (0) | 2019.12.02 |
[MONGODB] 이 필드를 MongoDB에 존재하는지 확인 (0) | 2019.12.02 |