用途
该技能面向在 Meteor 3 中编写或调试 Mongo 查询的场景,帮助区分服务端 MongoDB 异步驱动与客户端 Minimongo 内存同步模拟器这两种实现,避免在共享代码中误用同步 API。
主要能力
- 提供查询位置决策流程:仅服务端使用
await Collection.*Async(...);仅客户端可同步调用;同构代码优先使用异步 API。 - 说明服务端读取与写入的异步写法,例如
findOneAsync、fetchAsync、countAsync、insertAsync、updateAsync、removeAsync。 - 说明客户端 Minimongo 的同步与异步用法,并指出异步 API 在客户端仍返回真实 Promise,
await之后会在后续微任务恢复。 - 介绍索引创建方式,建议在应用启动时通过
createIndexAsync建立索引,并说明复合索引键顺序的选择依据与使用explain("executionStats")验证执行计划。 - 说明响应式来源:Meteor 3.0 至 3.4 在配置
MONGO_OPLOG_URL时使用 oplog,否则轮询;Meteor 3.5+ 默认按 changeStreams、oplog、polling 顺序为每个查询选择驱动。 - 介绍 Meteor 3.5+ 通过
METEOR_REACTIVITY_ORDER或包配置覆盖响应式顺序,以及disable-oplog包只移除 oplog 步骤、不关闭 change streams。 - 说明 change streams 的适用条件:MongoDB 6+ 副本集或分片集群、无序 observer、无 skip 或 limit、选择器可被 Minimongo 编译;不满足时回退到下一驱动。
- 介绍 Meteor 3.6 对
$where/$near选择器不用于 Change Streams 的限制,以及需要验证轮询回退。 - 介绍 Meteor 3.5+ 的 collation 用法,包括 locale、strength 1 至 3、caseLevel、numericOrdering、caseFirst,并建议服务端查询使用相同 collation 的索引。
- 列出反模式:服务端使用同步 Mongo、共享代码使用同步 Mongo、服务端无界 find、发布时忘记字段投影、假设异步 Minimongo API 内联恢复。
使用方式
技能以决策流程和代码示例呈现。服务端读取示例包括 await Posts.findOneAsync(id)、带 fields、sort、limit 的 find(...).fetchAsync() 以及 countAsync()。服务端写入示例包括 insertAsync、updateAsync、removeAsync。客户端读取示例包括 await Posts.findOneAsync(id) 与 await Posts.find({ ownerId }).fetchAsync(),以及仅客户端可用的同步 findOne、fetch。索引示例在 Meteor.startup 中调用 createIndexAsync。响应式顺序可通过环境变量 METEOR_REACTIVITY_ORDER=oplog,polling 或 packages.mongo.reactivity 配置覆盖。collation 示例展示在查询与索引中传入相同 collation 对象。
适用场景
适用于 Meteor 3 项目中涉及 Mongo.Collection、find/findOne、服务端异步与客户端 Minimongo 同步差异、oplog 与 change streams 响应式行为、索引与 collation 的编写和调试工作。
限制
资料未提供该技能的安装命令、收费方式、平台支持范围或效果保证。部分行为依赖具体 Meteor 版本与 MongoDB 版本,例如 change streams 需要 MongoDB 6+ 副本集或分片集群,oplog 需要配置 MONGO_OPLOG_URL。Meteor 3.0 至 3.4 不支持核心 change streams 与响应式顺序设置。Minimongo 仅支持部分 collation 选项,其他选项仅服务端有效。