2016-04-14 12 views
0

mongodbを使って、mongoの2人のユーザー間で簡単なメッセージングシステムを実装しようとしています。私はuser0とuser1という2人のユーザーを連れて、コレクション内のエントリを検索できるようにしたいと考えています。これらの2人のユーザーのエントリが存在しない場合は、そのユーザーを作成し、メッセージフィールドに送信されたメッセージを追加します。存在する場合は、メッセージをメッセージフィールドにプッシュしたいだけです。mongodbに多数の要素を持つ順不同のキーを作る方法

私は実際にこれを実装する最良の方法はわかりません。

db.privateChat.update(
    {between:{$all:['user0', 'user1']}}, 
    {$push:{message:'text'}}, {upsert:true} 
) 

他の同様のエントリスキームは動作しません。彼らは、エラーを生成:

"Cannot create base during insert of update. Caused by :ConflictingUpdateOperators Cannot update 'between' and 'between' at the same time" 
私は他の方法を考えることができ

この発言からハッシュを追加一緒に(ユーザーの順序は、検索のために重要ではありません)対称鍵を生成しますか、 messenger0かmessenger1のどちらかがuser0かuser1のどちらかであるかどうかを確認するクエリですが、これは素晴らしい方法とは思われません。これはまったく間違ったアプローチですか?

ありがとうございました。

答えて

0

これは設計によって解決できると思います。 コレクションチャットに文書があるとしましょう。

chat{ 
_id, 
between[arrayOfIds], 
startTime, 
events[ 
{message:{ 
     fromUserId, 
     timeStamp, 
     data} 
}} 
]} 
} 

メッセージはチャット内のメッセージオブジェクトに保存されます。

アプリでチャット_idを認識するため、2人以上のユーザー間でグループチャットを行うときに問題は発生しません。

このアプローチは、など、一日、あなたは毎週新しいチャットエントリーを開始することができて、あなたがあふれ、ドキュメントのサイズ制限を防ぐことができるようになります...

は、お楽しみに!

関連する問題