将数组对象添加到minimongo

时间:2016-10-03 08:06:45

标签: mongodb meteor minimongo

我有一个聊天应用,即Ionic 2Meteor MongoDB。它运作得很好。

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

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

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

我从本地存储的chat获取SQLlite个数据(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

我有什么想法可以将其插入到全局定义的'footerCallback': function ( row, data, start, end, display ) { var api = this.api(), data; //Remove the formatting to get integer data for summation var numVal = function ( i ) { return typeof i === 'string' ? parseFloat(i.split("€")[1].split("<")[0].replace(/,/, '.')) : typeof i === 'number' ? i : 0; }; var perTemp = function ( i ) { // I need some help here... } // Total over all pages totalvar = api .column( 3 ) .data() .reduce( function (a, b) { return numVal(a) + numVal(b); }, 0 ); totaltemp= api .column( 4 ) .data() .reduce( function (a, b) { return perTemp(a) + perTemp(b); }, 0 ); // Update footer $( api.column( 3 ).footer() ).html('€ ' + totalvar); $( api.column( 4 ).footer() ).html(totaltemp[0] + "h" + totaltemp[1] + "m");

1 个答案:

答案 0 :(得分:1)

  

是否可以将SQLite数据(数组)添加到Mongo.Cursor?当我这样做时,我想在服务器上添加minimongo而不是MongoDB。

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

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

var localChatCollection = new Mongo.Collection(null)

然后,您可以使用与同步集合相同的方式插入localChatCollection

Source: Meteor docs