MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara menentukan preferensi baca dalam kueri mongo Meteor

Saya harap berikut ini memberikan pemahaman yang lebih baik tentang hubungan antara Meteor dan Mongo.

Koleksi meteor untuk kenyamanan lebih

Meteor memberi Anda fungsionalitas mongo penuh. Namun untuk kenyamanan, ia menyediakan API yang dibungkus koleksi mongo yang paling terintegrasi dengan lingkungan Meteor. Jadi jika Anda mengimpor Mongo melalui

import { Mongo } from 'meteor/mongo' 

Anda terutama mengimpor koleksi mongo yang dibungkus di mana operasi dijalankan dalam serat Meteor. Kursor yang dikembalikan oleh kueri dari koleksi yang dibungkus ini juga bukan kursor "alami" tetapi juga kursor terbungkus untuk dioptimalkan Meteor.

Jika Anda mencoba mengakses fitur asli pada instance ini yang tidak diterapkan, Anda akan menerima kesalahan. Dalam kasus Anda:

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

Mengarah ke

TypeError: docsCursor.readPref is not a function

Mengakses koleksi driver node mongo

Kabar baiknya adalah, Anda dapat mengakses lapisan di bawahnya melalui Collection.rawCollection() di mana Anda memiliki akses penuh ke driver node Mongo. Ini karena di bawah kap Meteor Mongo.Collection dan itu Cursor menggunakan driver asli ini pada akhirnya.

Sekarang Anda akan menemukan dua masalah lain:

  1. readPref dinamai dalam kursor node-mongo cursor.setReadPreference (3.1 API).

  2. Cursor.fetch tidak ada tetapi bernama cursor.toArray yang (seperti yang dilakukan banyak operasi asli) mengembalikan Janji

Jadi akhirnya menjawab pertanyaan Anda

Anda dapat melakukan hal berikut:

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

Ringkasan

  • Dengan menggunakan collection.rawCollection() Anda memiliki akses ke spektrum penuh API driver node mongo

  • Anda sendirian untuk mengintegrasikan operasi, kursor, dan hasil (Janji) ke dalam lingkungan Anda. Pembantu yang baik adalah Meteor.bindEnvironment dan Meteor.wrapAsync

  • Waspadalah terhadap perubahan API dari driver node-mongo. Di satu sisi versi mongo yang didukung oleh driver, di sisi lain versi driver yang didukung oleh Meteor.

  • Perhatikan bahwa lebih mudah untuk "mengacaukan" hal-hal dengan API asli tetapi juga memberi Anda banyak opsi baru. Gunakan dengan hati-hati.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kesalahan Fatal - kelas 'Mongo' tidak ditemukan

  2. Hubungan Mongo DB antar objek

  3. Periksa apakah dokumen ada di mongodb menggunakan es7 async/await

  4. Respon mongodb objectDB di Jersey API-REST

  5. Cara menggunakan Agregat di luwak