Сначала скажу, что я новичок в MongoDb и ориентирован на документы в целом.
После некоторых проблем со встроенными документами в mongodb (невозможно выбрать только вложенный документ (например, отдельный комментарий в записи блога)),
Я перепроектировал БД. Теперь у меня есть две коллекции, посты и комментарии (не настоящие, использую пример блога для удобства).
Пример - документ коллекции сообщений:
Array {
'_id' : MongoId,
'title' : 'Something',
'body' : 'Something awesome'
}
Пример - комментарий к документу:
Array {
'_id' : MongoId,
'postId' : MongoId,
'userId' : MongoId,
'commentId' : 33,
'comment' : 'Punch the punch line!'
}
Как видите, у меня есть несколько документов с комментариями (как я уже говорил, я хочу иметь возможность выбирать один комментарий, а не их массив).
Мой план таков: я хочу выбрать один комментарий из коллекции, используя postId и commentId (commentId является уникальным значением только среди комментариев с одинаковым postId).
Да, и commentId должен быть целым числом, чтобы я мог использовать это значение для вычисления следующих и предыдущих документов, своего рода числа "orderWith".
Теперь я могу получить такой комментарий:
URI: mongo.php? Post = 4de526b67cdfa94f0f000000 & comment = 4
Код: $ comment = $ collection-> findOne (массив ("postId" => $ theObjId, "commentId" => (int) $ commentId));
У меня есть несколько вопросов.
- Я правильно делаю?
- Каков наилучший способ создания подобного комментария?
- Каков наилучший способ обеспечить уникальность commentId среди комментариев с одинаковым postId (upsert?)?
- Как работать с параллельными запросами?