MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да зададете предпочитание за четене в mongo заявките на Meteor

Надявам се, че следното дава по-добро разбиране на връзката между Метеор и Монго.

Колекции от метеори за повече комфорт

Meteor ви предоставя пълната монго функционалност. За удобство обаче предоставя опакован API на монго колекция, която се интегрира най-добре със средата на Meteor. Така че, ако импортирате Mongo чрез

import { Mongo } from 'meteor/mongo' 

вие основно импортирате обвитата колекция mongo, където операциите се изпълняват във влакно Meteor. Курсорът, който се връща от заявки на тези опаковани колекции, също не са „естествените“ курсори, но и обвити курсори да бъде оптимизиран за Meteor.

Ако се опитате да получите достъп до естествена функция на тези екземпляри, която не е внедрена, ще получите грешка. Във вашия случай:

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

Води до

TypeError: docsCursor.readPref is not a function

Достъп до колекциите драйвери на node mongo

Добрата новина е, че имате достъп до слоя отдолу чрез Collection.rawCollection() където имате пълен достъп до драйвера на възел Mongo. Това е така, защото под капака на Meteor е Mongo.Collection и това е Cursor в крайна сметка използват този естествен драйвер.

Сега ще намерите два други проблема:

  1. readPref е именуван в node-mongo курсор cursor.setReadPreference (3.1 API).

  2. Cursor.fetch не съществува, но се нарича cursor.toArray което (както правят много собствени операции) връща Promise

За да отговоря най-накрая на въпроса ви

можете да направите следното:

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

Резюме

  • Чрез използване на collection.rawCollection() вие имате достъп до пълния спектър от API на node mongo драйвер

  • Вие сте сами, за да интегрирате операциите, курсорите и резултатите (обещанията) във вашата среда. Добри помощници са Meteor.bindEnvironment и Meteor.wrapAsync

  • Пазете се от промени в API на драйвера node-mongo. От една страна версията mongo, която се поддържа от драйвера, от друга страна версията на драйвера, която се поддържа от Meteor.

  • Обърнете внимание, че е по-лесно да "объркате" нещата с естествения API, но също така ви дава много нови опции. Използвайте внимателно.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Възможно ли е да преименувате полето _id след груповото агрегиране на mongo?

  2. Вземете броя на полетата във всеки документ чрез заявка с помощта на MongoDB java драйвер

  3. В Jongo, как да намерите множество документи от Mongodb чрез списък с идентификатори

  4. Актуализация на MongoDB с условие

  5. Mongoose - Вземете списък с _id вместо масив от обекти с _id