いくつかのプロジェクトで、ある時点でMongoDBに切り替えることを検討しています。そのためには、それをテストして、何ができるのか、何ができないのかを知る必要があります。
MongoDBがどのように機能するかについていくつかの本を読んだ後、私は実際にどのように機能するかについて少し混乱していると言わなければなりませんselect。
私がというコレクションを持っているとしましょうusers:
{
user_name: string,
....,
....,
messages_can_be_seen_by_others: boolean
}
また、私はのコレクションを持っていますtopics:
{
topic_title: string,
.....,
.....,
topic_messages:
[
{
user_name: string,
text: string,
date: DateTime
},
{
user_name: string,
text: string,
date: DateTime
}
]
.....
}
usersコレクションに応じて、1つのトピックとそのすべてのメッセージを選択するにはどうすればよいですか?つまり、としてマークされPerson1ていない人によって書かれたメッセージは、データベースによって返されるべきではありません。messages_can_be_seen_by_otherstrue
それで、map / reduceを使用するphpか、すべての結果が得られたらフィルターをかける必要がありますか、それとも私が気付いていない他のことはありますか?map / reduceを使用する必要がある場合、それはどれほど難しいでしょうか?
また、別の質問があります。topics最初のdateメッセージからすべてのフィールドを選択するにはどうすればよいですか?(のようなもの$elemMatch.messages.0.date)
PS:追加の質問:トピックに含まれるメッセージの数を返すことはできますか?(PHPを使用して実際にカウントすることはありません。MongoDBselectステートメントを計画するだけです)
よろしく