Разработка схемы MongoDB - поиск последних X комментариев во всех сообщениях блога, отфильтрованных пользователем - PullRequest
1 голос
/ 31 марта 2011

Я пытаюсь воспроизвести классическую схему блога от одного Post до многих Comment с помощью Morphia и Play Framework.

Моя схема в Монго:

{ "_id" : ObjectId("4d941c960c68c4e20d6a9abf"), 
 "className" : "models.Post", 
  "title" : "An amazing blog post", 
  "comments" : [
    {
        "commentDate" : NumberLong("1301552278491"),
        "commenter" : {
            "$ref" : "SiteUser",
            "$id" : ObjectId("4d941c960c68c4e20c6a9abf")
        },
        "comment" : "What a blog post!"
    },
    {
        "commentDate" : NumberLong("1301552278492"),
        "commenter" : {
            "$ref" : "SiteUser",
            "$id" : ObjectId("4d941c960c68c4e20c6a9abf")
        },
        "comment" : "This is another comment"
    }
]}

Я пытаюсь представить аспект блога в социальных сетях, поэтому я хотел бы предоставить на главной странице SiteUser последние X комментариев друзей этого SiteUser во всех сообщениях.

Мои модели следующие:

@Entity
public class Post extends Model {

    public String title;

    @Embedded
    public List<Comment> comments;

}

@Embedded
public class Comment extends Model {

    public long commentDate;

    public String comment;

    @Reference
    public SiteUser commenter;

}

Из того, что я прочитал в другом месте , я думаю, мне нужно выполнить следующее для базы данных (где [a, b, c] представляет SiteUser s):

db.posts.find( { "comments.commenter" : {$in: [a, b, c]}} )

У меня есть List<SiteUser>, чтобы передать Morphia для фильтрации, но я не знаю, как

  1. установить индекс на Post для Comments.commenter изнутри Morphia
  2. на самом деле построить вышеуказанный запрос

1 Ответ

1 голос
/ 01 апреля 2011
  1. Либо поместите @Indexes(@Index("comments.commenter")) в класс Post, либо @Indexed в commenter поле Comment класса (Datastore.ensureIndexes() Морфия будет повторяться в классах и правильно создавать comments.commenter указатель на коллекцию Post

  2. Я думаю, что ds.find(Post.class, "comments.commenter in", users) будет работать, ds будет Datastore и users вашим List<SiteUser> (хотя я не использую @Reference, поэтому я не могу подтвердить; вы можете сначала нужно извлечь список их Key s).

...