私のconversations
コレクションには、複数のユーザー間でチャットを行う以下の形式のドキュメントがいくつかあります。threadId は、2 人の会話中のユーザーの 1 人の ID を保持します。
51c0c35b7daabc3410000001
との会話51c0c35b7daabc3410000002
{
"from" : ObjectId("51c0c35b7daabc3410000001"),
"to" : ObjectId("51c0c35b7daabc3410000002"),
"threadId" : ObjectId("51c0c35b7daabc3410000002"),
"message" : "Hi there!"
}
{
"from" : ObjectId("51c0c35b7daabc3410000002"),
"to" : ObjectId("51c0c35b7daabc3410000001"),
"threadId" : ObjectId("51c0c35b7daabc3410000002"),
"message" : "How are you?"
}
{
"from" : ObjectId("51c0c35b7daabc3410000001"),
"to" : ObjectId("51c0c35b7daabc3410000002"),
"threadId" : ObjectId("51c0c35b7daabc3410000002"),
"message" : "I am good. How are you?"
}
51c0c35b7daabc3410000001
との会話51c0c69989a44a6812000003
{
"from" : ObjectId("51c0c35b7daabc3410000001"),
"to" : ObjectId("51c0c69989a44a6812000003"),
"threadId" : ObjectId("51c0c69989a44a6812000003"),
"message" : "Hello!"
}
{
"from" : ObjectId("51c0c69989a44a6812000003"),
"to" : ObjectId("51c0c35b7daabc3410000001"),
"threadId" : ObjectId("51c0c69989a44a6812000003"),
"message" : "Hey.."
}
threadId に基づいてグループ化したいのですが、出力は次の形式にする必要があります
{
"from" : ObjectId("51c0c35b7daabc3410000001"),
"to" : ObjectId("51c0c35b7daabc3410000002"),
"threadId" : ObjectId("51c0c35b7daabc3410000002"),
"message" : "I am good. How are you?"
}
{
"from" : ObjectId("51c0c69989a44a6812000003"),
"to" : ObjectId("51c0c35b7daabc3410000001"),
"threadId" : ObjectId("51c0c69989a44a6812000003"),
"message" : "Hey.."
}
したがって、個別の threadId (または threadId のみに基づくグループ) を持つすべてのドキュメントを検索したいと考えています。出力には、ドキュメント内の他のすべてのフィールドも含まれている必要があります。
mapReduce、集約/グループ、個別、またはこれらの組み合わせ? どうすればいいですか?
編集
それをSQL文に入れるには、次のような単純なものが必要です
SELECT * FROM 会話 GROUP BY threadId;