sql >> Database >  >> NoSQL >> MongoDB

Hoe leesvoorkeur op te geven in Meteor's mongo-query's

Ik hoop dat het volgende een beter begrip geeft van de relatie tussen Meteor en Mongo.

Meteor-collecties voor meer comfort

Meteor biedt u de volledige mongo-functionaliteit. Voor het gemak biedt het echter een verpakte API van een mongo-collectie die het beste integreert met de Meteor-omgeving. Dus als je Mongo importeert via

import { Mongo } from 'meteor/mongo' 

je importeert voornamelijk de verpakte mongo-collectie waar bewerkingen worden uitgevoerd in een Meteor-vezel. De cursor die wordt geretourneerd door query's van deze verpakte collecties zijn ook niet de "natuurlijke" cursors, maar ook verpakte cursors meteoor geoptimaliseerd zijn.

Als u op deze instanties probeert toegang te krijgen tot een native functie die niet is geïmplementeerd, ontvangt u een foutmelding. In jouw geval:

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

Leidt naar

TypeError: docsCursor.readPref is not a function

Toegang tot de verzamelingen van node mongo-stuurprogramma's

Het goede nieuws is:je hebt toegang tot de onderliggende laag via Collection.rawCollection() waar u volledige toegang hebt tot het knooppunt Mongo-stuurprogramma. Dit komt omdat onder de motorkap Meteor's Mongo.Collection en het is Cursor maken uiteindelijk gebruik van deze native driver.

Nu vindt u nog twee andere problemen:

  1. readPref wordt genoemd in een node-mongo-cursor cursor.setReadPreference (3.1 API).

  2. Cursor.fetch bestaat niet maar heet cursor.toArray die (zoals veel native bewerkingen doen) een belofte retourneert

Dus om eindelijk je vraag te beantwoorden

je kunt het volgende doen:

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

Samenvatting




  1. Vereist Redis Cache in .NET Core 3 het gebruik van het Stack Exchange-pakket?

  2. C# mongodb - hoe geneste array-elementen bij te werken

  3. kan regex niet gebruiken in $in operator in mongodb

  4. $groepsresultaat verkrijgen met groepstelling