2016-10-03 22 views
0

私はIonic 2MeteorMongoDBを使っているチャットアプリを持っています。それは完全に動作します。配列オブジェクトをminimongoに追加

ただし、すべてがサーバーのMongoDBに保存されているため、ユーザーは自分のメッセージを表示するたびに、クラウド内で実行されているMeteor/Mongoサーバーに接続する必要があります。また、1人のユーザーがchatを削除すると、MongoDBchatが削除され、対応する他のユーザーのchatも削除されます。

私はmessagesが(私はSQLiteを使用しています)、デバイス上でローカルに保持され、両方のユーザーがそれらをダウンロードするまで、唯一の新しいmessagesは、クラウド内に保持されているのWhatsAppと同様の機能をしたいと思います。

現在のところ私のアプリはMongo.Cursor<Chat>オブジェクトを反復処理します。また、このオブジェクト(this.chats.observe({changed: (newChat, oldChat) => this.disposeChat(oldChat), removed: (chat) => this.disposeChat(chat)});)を観察します。

私がローカルに保管しているSQLliteのデータ(Array<Chat>)を取得します。

質問

Mongo.Cursor<Chat>SQLiteデータ(Array<Chat>)を追加することが可能ですか?私がそうするとき、私はちょうどminimongoに加えて、サーバー上のMongoDBではない。

おかげで、以下のアドバイスあたり

UPDATE

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); 
    }); 

が更新されます。

UPDATE

私は、次の操作を行い、それinsertschatオブジェクト:私はグローバルlocalChatCollectionを定義した場合

 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); 
     }); 

しかし、それはinsertchatオブジェクトません。エラーはありませんが、プロセスはinsert行で停止します。

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

私はこれがグローバルに定義されたcollectionに挿入する方法を得ることができます任意のアイデア?

答えて

1

Mongo.CursorにSQLiteデータ(配列)を追加できますか?私がそうするとき、私はミニゴンに追加するだけで、サーバー上のMongoDBには追加しません。

Meteor自体はSQLiteについては何も知らないが、その一部が動作しているように思える。

mongodbサーバではなく、minimongoに追加するだけで、クライアント側のコレクションを探しています。ちょうどあなたが、その後localChatCollectionにあなたが同期コレクションの場合と同じように挿入することができ、あなたのコレクションを作成するための呼び出しの最初のパラメータとしてではすなわち

var localChatCollection = new Mongo.Collection(null) 

nullを渡します。

Source: Meteor docs

+0

こんにちはcobberboy、フィードバックありがとうございます。私は 'Mongo.Collection'ではなく' Mongo.Cursor'を使用しています。私は 'Cursor'で' observe'を使っています。 'Collection'と同じことをするのは可能でしょうか? – Richard

+0

文書によると、私は 'コレクション'を '観察することができません。だから私は間違っていない限り、上記は適切な答えだとは思わない? – Richard

+0

解決策はありますか、ありがとうございます。 – Richard

関連する問題