将数组对象添加到 minimongo

Add array object to minimongo

我有一个聊天应用程序,它使用 Ionic 2Meteor 以及 MongoDB。它完美运行。

但是,所有内容都存储在 MongoDB 服务器上,因此每次用户想要查看他们的消息时,他们都需要连接到 Meteor/Mongo 服务器 运行在云端。此外,如果一个用户删除了他们的 chat,它将删除 MongoDB 上的 chat,并且相应的其他用户也将删除他们的 chat

我想要与 WhatsApp 类似的功能,其中 messages 保存在设备本地(我正在使用 SQLite),并且只有新的 messages 保存在云中,直到两个用户都下载它们。

目前我的应用程序迭代 Mongo.Cursor<Chat> 对象。它还观察这个对象 (this.chats.observe({changed: (newChat, oldChat) => this.disposeChat(oldChat), removed: (chat) => this.disposeChat(chat)});).

我从 SQLlite 中获取 chat 数据并存储在本地 (Array<Chat>)。

问题

是否可以将 SQLite 数据 (Array<Chat>) 添加到 Mongo.Cursor<Chat>?当我这样做时,我只想添加到服务器上的 minimongo 而不是 MongoDB

谢谢

更新

Asp 根据下面的建议,我执行以下操作:

let promise: Promise<Mongo.Cursor<Chat>> = new Promise<Mongo.Cursor<Chat>>(resolve => {
  this.subscribe('chats', this.senderId, registeredIds, () => {
    let chats: Mongo.Cursor<Chat> = Chats.find(
      { memberIds: { $in: registeredIds } },
      {
        sort: { lastMessageCreatedAt: -1 },
        transform: this.transformChat.bind(this),
        fields: { memberIds: 1, lastMessageCreatedAt: 1 }
      }
    );

    this.localChatCollection = new Mongo.Collection<Chat>(null);
    console.log(this.localChatCollection);

    chats.forEach(function (chat: Chat) {
      console.log('findChats(): add chat to collection: ' + chat);
      this.localChatCollection.insert(chat);
    });

如果有效会更新。

更新

当我执行以下操作时,inserts chat 对象:

      let promise: Promise<Mongo.Collection<Chat>> = this.findChats();
      promise.then((data: Mongo.Collection<Chat>) => {

        let localChatCollection: Mongo.Collection<Chat> = new Mongo.Collection<Chat>(null);
        data.find().forEach(function (chat: Chat) {
          console.log('==> ' + chat);
          localChatCollection.insert(chat);
        });

但是,如果我全局定义 localChatCollection,它不会 insert chat 对象。没有错误,但该过程只是在 insert 行停止。

private localChatCollection: Mongo.Collection<Chat> = new Mongo.Collection<Chat>(null);
....
         this.localChatCollection.insert(chat);

关于如何将其插入到全局定义的 collection 中的任何想法?

Is it possible to add the SQLite data (Array) to the Mongo.Cursor? When I do so, I want to just add to minimongo and not MongoDB on the server.

Meteor 本身对 SQLite 一无所知,但听起来你有它的一部分在工作。

要仅添加到 minimongo 而不是 mongodb 服务器,您正在寻找客户端集合。只需将 null 作为第一个参数传递给创建您的集合的调用,即

var localChatCollection = new Mongo.Collection(null)

然后您可以像使用同步集合一样插入到 localChatCollection

Source: Meteor docs