如何在 Meteor 的 mongo 查询中指定读取首选项

2023-11-21

在 Meteor Mongo 中,如何在 Meteor Mongo Query 中将 readPref 指定为 Primary|Secondary。


希望下面的内容能让大家更好的理解Meteor和Mongo的关系。


Meteor系列更舒适

Meteor 为您提供完整的 mongo 功能。然而为了舒适,它提供了封装的API与 Meteor 环境集成得最好的 mongo 集合。所以如果你通过导入 Mongo

import { Mongo } from 'meteor/mongo' 

您主要导入包装好的 mongo 集合,其中的操作在 Meteor Fiber 中执行。这些包装集合的查询返回的游标也不是“自然”游标,而是包裹游标进行 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')
}); 

Leads to

TypeError: docsCursor.readPref is not a function


访问节点 mongo 驱动程序集合

好消息是,您可以访问下面的图层 via Collection.rawCollection()您可以在其中完全访问节点 Mongo 驱动程序。这是因为在 Meteor 的幕后Mongo.Collection这是Cursor最终使用这个本机驱动程序。

现在你会发现另外两个问题:

  1. readPref在 node-mongo 游标中命名光标.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))
});


Summary

  • 通过使用collection.rawCollection()您可以访问全方位的节点 mongodb 驱动 API

  • 您需要自行将操作、光标和结果(Promises)集成到您的环境中。好帮手是流星绑定环境 and Meteor.wrapAsync

  • 请注意 Node-mongo 驱动程序的 API 更改。一方面是驱动支持的mongo版本,另一方面是Meteor支持的驱动版本。

  • 请注意,使用本机 API 更容易“搞乱”事情,但它也为您提供了很多新选项。小心使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Meteor 的 mongo 查询中指定读取首选项 的相关文章

  • 环回关系不填充对象 ID 数组

    到目前为止我有 2 个模型 工作流程核心 工作流程步骤 工作流核心有一个steps属性 该属性是数组类型并且包含1 多个步骤 当呼叫接通时工作流程核心响应正文不会使用实际步骤对象填充步骤数组 工作流程核心 json name workflo
  • 如何在两个或多个 Heroku dyno 上运行 Meteor 应用程序?

    我有 Meteor 应用程序 它使用 1 dyno 在 Heroku 平台上运行 当我增加测功机数量时 它会停止工作 并在客户端报告一些 XHR 问题 错误 404 有人在两个或更多 Heroku dyno 上成功运行 Meteor 应用程
  • mongo BadValue 未知运算符:$or

    该集合有一份文档 id ObjectId 54b513933aca242d9915a787 carriers carrier ObjectId 54b54d223aca242d9915a788 carryingInterval from I
  • Spring Data mongodb:添加 MongoDb 访问凭据

    我的 Spring 应用程序中有以下工作配置
  • MongoDB Java 嵌套文档无法使用键名中的点进行访问

    当在Java中使用MongoDB API时 我试图检索以下值two在如下所示的文档中 data id 1234 one two three 我正在运行这个 MongoCollection
  • mongodb 中的 Redact 对我来说似乎很晦涩

    我现在正在与 redact 作斗争 我不确定是否理解它 我刚刚阅读了文档并尝试在集合成绩上使用 redact 它来自 mongodb 在线培训 grades 集合中的文档如下所示 id ObjectId 50b59cd75bed76f465
  • Loopback ValidationError:“Role”实例无效。详细信息:`name`已经存在(值:“admin”)

    我是环回新手 但是我按照以下步骤安装和搭建我的文件夹 环回服务器 在 server boot 内创建了一个文件 script js 并包含以下代码 module exports function app var MongoDB app da
  • Node.js 找不到模块“mongodb”

    我正在经历我的第一个 Node js 项目 我已经安装了 mongodb 有一个 server js 文件 当我尝试运行它时 出现此错误 module js 340 throw err Error Cannot find module mo
  • 访问 Amazon EC2 上的 Mongodb 时出现问题

    我还有一个问题要问你 我有安装了 mondodb 的 Amazon EC2 实例 它工作得很好 除了一件事 我无法从外部 我的电脑 访问 连接到 它 我认为安全组的问题 这是某种默认防火墙 有谁知道如何配置EC2实例来访问mongodb 提
  • 用于高效大规模图遍历的数据库

    我有一个大型二分有向图数据集 约 2000 万个元素 在当前的使用中 我运行的遍历算法每次运行约 500 000 个节点 这些算法有效 但历史上运行的是从文本文件加载到内存的数据 文本文件似乎是一个不好的方法 所以我将数据作为邻接列表传输到
  • 何时对 MongoDB 集合调用 EnsureIndex?

    我什么时候应该打电话ensureIndex 插入单条记录之前 插入单条记录之后 或者调用之前find 看来我的评论有点被误解了 所以我会澄清一下 当你调用它时并不重要只要在第一次调用 find 之前的某个时刻调用它即可 换句话说 什么时候创
  • 为什么函数不可序列化?

    背景 在 Meteor 文档中Meteor call http docs meteor com full meteor call 它写道 如果您将回调函数作为最后一个参数 它不能作为该方法的参数 因为函数不可序列化 我跑过类似的东西Mete
  • $setIntersection 失败,子文档数组不在集合中

    考虑以下文档 item1 a 1 b 2 item2 a b 以下查询 db test aggregate project items setIntersection item1 item2 返回预期结果 id ObjectId 57107
  • MongoDB/PyMongo:如何在 Map 函数中使用点表示法?

    我正在尝试计算每个邮政编码中找到的记录数 在我的 MongoDB 中 嵌入了邮政编码 使用点表示法 它位于 a res z a 代表地址 res 代表住宅 z 代表邮政编码 例如 这工作得很好 db NY count a res z 141
  • 为什么MongoDB不使用复合索引进行查询?

    以下是我对此集合的复合索引和单一索引 db Collection getIndexes 1 v 2 key id 1 name id ns service Collection 2 v 2 key FirstId 1 SecondId 1
  • 如何在 SpringBoot v3.0.0 中使用嵌入式 MongoDB?

    我正在尝试连接嵌入式 mongodb 并使用 MongoDbSpringIntegrationTest 对其进行测试 问题是相同的代码在 2 7 7 中适用于 spring boot 但在 3 0 0 中不适用于 spring boot 问
  • symfony2形式选择和mongodb

    使用 Entity 时 我们可以从 Entity 加载选择via表单字段类型实体 builder gt add group entity array class gt Fist CoreBundle Document Group 但是当使用
  • 从一个 Meteor 工作区切换到另一个

    示例 您制作了 todos 示例 并且它正在运行 突然 你想开始一个名为 西瓜 的全新项目 我的假设是我能够cd watermelon run meteor再次 并切换它 并非如此 建议 也许我应该提出这个请求 流星没有出现在jobs要么
  • Mongodb 的 Mongoose 与 Mongoose

    我正在学习 NodeJ 要从 NodeJS 连接并使用 MongoDB 我看到很多使用 Monk 或 Mongoose 的示例 这两个库等效吗 它们具有相同的功能还是都有特定的用途 作为 NodeJS 的初学者 我应该使用哪个 以下是使用
  • 猫鼬递归填充

    我已经搜索了一段时间 但没有找到任何好的答案 我有n deep我存储在数据库中并且想要填充的树所有的父母所以最后我得到了完整的树 node parent parent parent 到目前为止 我已达到 2 级 正如我提到的 我需要达到 2

随机推荐