MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách chỉ định tùy chọn đọc trong các truy vấn mongo của Meteor

Tôi hy vọng phần sau sẽ hiểu rõ hơn về mối quan hệ giữa Meteor và Mongo.

Bộ sưu tập sao băng để thoải mái hơn

Meteor cung cấp cho bạn chức năng mongo đầy đủ. Tuy nhiên, để tạo sự thoải mái, nó cung cấp một API được bao bọc của một bộ sưu tập mongo tích hợp tốt nhất với môi trường Meteor. Vì vậy, nếu bạn nhập Mongo qua

import { Mongo } from 'meteor/mongo' 

bạn chủ yếu nhập bộ sưu tập mongo được bao bọc nơi các hoạt động được thực thi trong sợi Meteor. Con trỏ được trả về bởi các truy vấn của các tập hợp được bao bọc này cũng không phải là con trỏ "tự nhiên" mà còn là con trỏ con trỏ được bọc để được tối ưu hóa Meteor.

Nếu bạn cố gắng truy cập một tính năng gốc trên các trường hợp không được triển khai này, bạn sẽ nhận được lỗi. Trong trường hợp của bạn:

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

Dẫn đến

TypeError: docsCursor.readPref is not a function

Truy cập bộ sưu tập trình điều khiển nút mongo

Tin tốt là bạn có thể truy cập lớp bên dưới qua Collection.rawCollection() nơi bạn có toàn quyền truy cập vào trình điều khiển nút Mongo. Điều này là do Mongo.Collection của Meteor và đó là Cursor cuối cùng đang sử dụng trình điều khiển gốc này.

Bây giờ bạn sẽ tìm thấy hai vấn đề khác:

  1. readPref được đặt tên trong con trỏ nút-mongo cursor.setReadPreference (3.1 API).

  2. Cursor.fetch không tồn tại nhưng được đặt tên là cursor.toArray mà (như nhiều thao tác gốc thực hiện) trả về một Lời hứa

Vì vậy, để cuối cùng trả lời câu hỏi của bạn

bạn có thể làm như sau:

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

Tóm tắt

  • Bằng cách sử dụng collection.rawCollection() bạn có quyền truy cập vào toàn bộ phổ của API trình điều khiển nút mongo

  • Bạn tự mình tích hợp các thao tác, con trỏ và kết quả (Lời hứa) vào môi trường của mình. Những người trợ giúp tốt là Meteor.bindEnosystem Meteor.wrapAsync

  • Cẩn thận với các thay đổi API của trình điều khiển node-mongo. Một mặt là phiên bản mongo được trình điều khiển hỗ trợ, mặt khác là phiên bản trình điều khiển được Meteor hỗ trợ.

  • Lưu ý rằng việc "làm rối" mọi thứ với API gốc sẽ dễ dàng hơn nhưng nó cũng cung cấp cho bạn rất nhiều tùy chọn mới. Sử dụng cẩn thận.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ log10

  2. Node.js + MongoDB:chèn một và trả về tài liệu mới được chèn

  3. Lỗi khi bật mã hóa dữ liệu bằng khóa cục bộ MONGODB

  4. Bản đồ PHP MongoDB giảm lỗi xác nhận db

  5. khung tổng hợp mongodb - tạo _id từ hàm