MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak określić preferencje odczytu w zapytaniach mongo Meteor

Mam nadzieję, że poniższe informacje pozwolą lepiej zrozumieć relacje między Meteorem a Mongo.

Kolekcje Meteor dla większego komfortu

Meteor zapewnia pełną funkcjonalność mongo. Jednak dla wygody zapewnia opakowany interfejs API kolekcji mongo, która najlepiej integruje się ze środowiskiem Meteor. Więc jeśli importujesz Mongo przez

import { Mongo } from 'meteor/mongo' 

importujesz przede wszystkim owiniętą kolekcję mongo, w której operacje są wykonywane na włóknie Meteor. Kursor zwracany przez zapytania tych opakowanych kolekcji również nie są „naturalnymi” kursorami, ale także kursory zawinięte do optymalizacji Meteora.

Jeśli spróbujesz uzyskać dostęp do natywnej funkcji w tych instancjach, która nie jest zaimplementowana, pojawi się błąd. W Twoim przypadku:

import { Meteor } from 'meteor/meteor';
import { Random } from 'meteor/random';

const ExampleCollection = new Mongo.Collection('examples')

Meteor.startup(() => {
  // code to run on server at startup
  ExampleCollection.insert({ value: Random.id() })
  const docsCursor = ExampleCollection.find();
  docsCursor.readPref('primary')
}); 

Prowadzi do

TypeError: docsCursor.readPref is not a function

Dostęp do kolekcji sterowników węzła mongo

Dobra wiadomość jest taka, że ​​możesz uzyskać dostęp do warstwy pod spodem przez Collection.rawCollection() gdzie masz pełny dostęp do sterownika węzła Mongo. To dlatego, że pod maską Meteora Mongo.Collection i to jest Cursor w końcu korzystają z tego natywnego sterownika.

Teraz znajdziesz dwa inne problemy:

  1. readPref jest nazwany w kursorze node-mongo cursor.setReadPreference (3.1 API).

  2. Cursor.fetch nie istnieje, ale ma nazwę cursor.toArray która (podobnie jak wiele operacji natywnych) zwraca obietnicę

Więc, aby w końcu odpowiedzieć na twoje pytanie

możesz wykonać następujące czynności:

import { Meteor } from 'meteor/meteor';
import { Random } from 'meteor/random';

const ExampleCollection = new Mongo.Collection('examples')

Meteor.startup(() => {
  // code to run on server at startup

  ExampleCollection.insert({ value: Random.id() })
  const docsCursor = ExampleCollection.rawCollection().find();
  docsCursor.setReadPreference('primary')
  docsCursor.toArray().then((docs) => {
    console.log(docs)
  }).catch((err)=> console.error(err))
});

Podsumowanie

  • Używając collection.rawCollection() masz dostęp do pełnego spektrum interfejsu API sterownika węzła mongo

  • Jesteś sam, aby zintegrować operacje, kursory i wyniki (obietnice) ze swoim środowiskiem. Dobrzy pomocnicy to Meteor.bindEnvironment i Meteor.wrapAsync

  • Uważaj na zmiany API sterownika node-mongo. Z jednej strony wersja mongo obsługiwana przez sterownik, z drugiej wersja sterownika obsługiwana przez Meteor.

  • Zauważ, że łatwiej jest „zepsuć” rzeczy z natywnym API, ale daje to również wiele nowych opcji. Używaj ostrożnie.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak znaleźć długość tablicy mongodb

  2. Jak „mongoose” radzi sobie z dodawaniem dokumentów, których FIELDS są __NOT__ częścią schematu?

  3. Wsparcie WSO2 DSS dla mongodb 3.x.x

  4. Znajdź dokumenty z tablicą, która nie zawiera określonej wartości

  5. Przykład transakcji w MongoDB 4.0 z wykorzystaniem PHP