inserting/caching 在来自 Meteor.call 的 minimongo 中

inserting/caching in minimongo from Meteor.call

因为我需要从客户端拉取大量数据,所以我使用Meteor.Call来获取数据。这样做时,数据不会插入到客户端的 minimongo Adapter 中。知道我该怎么做吗?我们可以访问客户端上的 minimongo 实例并缓存数据而不将其发送回服务器(意味着不使用 Collection./insert/upsert/update)吗?

如果您省略名称并在其中插入来自方法调用的数据,则可以在客户端创建本地集合。

此集合 "unmanaged" 未连接到任何服务器集合。然后您可以将数据插入到本地集合中。

要重现的一些最小示例:

server/main.js

import { Meteor } from 'meteor/meteor'
import { Mongo } from 'meteor/mongo'
import { Random } from 'meteor/random'

const SomeCollection = new Mongo.Collection('someCollection')

Meteor.startup(() => {
  for (let i = 0; i < 5; i++) {
    SomeCollection.insert({
      key: Random.id()
    })
  }
})

Meteor.methods({
  'docs' () {
    return SomeCollection.find().fetch()
  }
})

client/main.js

import { Meteor } from 'meteor/meteor'
import { Mongo } from 'meteor/mongo'

const LocalCollection = new Mongo.Collection(null)

Meteor.startup(() => {
  Meteor.call('docs', (err, documents) => {
    documents.forEach(doc => LocalCollection.insert(doc))
    setTimeout(() => {
      console.log(LocalCollection.find().fetch())
    }, 2000)
  })
})

客户端console.log输出:

0: {_id: "fKtSM2GEe3HQutqzf", key: "ndgcSoLDhh4tTekKy"}
1: {_id: "BcZE9TT9ZF5Qak3As", key: "Nw56vSnCAPtRGfw3j"}
2: {_id: "nWCD3Kk2arLHBJTN5", key: "ZP8mDaaqimZJQzM8c"}
3: {_id: "2H3haJiiv23dtJF94", key: "kue8BCWWasJJa74zm"}
4: {_id: "oDiF7ckK4PAXREFYe", key: "fvbv36kkPWb7uAcfN"}
5: {_id: "w3fz3GHP9W9suX2NG", key: "Cf6RCy2k3QA9KLxMX"}

文档中只有简短的参考:https://docs.meteor.com/api/collections.html

如果您正在寻找持久缓存,您可以查看 ground:db