Conception de schéma MongoDB - Trouver les derniers commentaires sur tous les articles de blog filtrés par l'utilisateur

StackOverflow https://stackoverflow.com/questions/5496714

  •  14-11-2019
  •  | 
  •  

Question

J'essaie de reproduire le schéma de blog classique de l'un Post trop Comments en utilisant Morphia et le cadre de jeu.

Mon schéma à Mongo est:

{ "_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"
    }
]}

J'essaie d'introduire un aspect de réseautage social sur le blog, donc je voudrais pouvoir fournir sur un SiteUserLa page d'accueil des X derniers commentaires SiteUserLes amis, dans tous les messages.

Mes modèles sont les suivants:

@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;

}

D'après ce que j'ai lu autre part, Je pense que je dois exécuter ce qui suit par rapport à la base de données (où [a, b, c] représente le SiteUsers):

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

j'ai un List<SiteUser> transmettre à Morphia pour le filtrage, mais je ne sais pas comment

  1. configurer un index sur Post pour Comments.commenter De l'intérieur de Morphia
  2. Construisez réellement la requête ci-dessus
Était-ce utile?

La solution

  1. Soit mis @Indexes(@Index("comments.commenter")) sur le Post classe, ou @Indexed sur le commenter champ du Comment classe (Morphia Datastore.ensureIndexes() se reproduira dans les classes et créera correctement le comments.commenter index sur le Post le recueil)

  2. je pense ds.find(Post.class, "comments.commenter in", users) travaillerait, ds être un Datastore et users ton List<SiteUser> (Je n'utilise pas @Reference Cependant, je ne peux donc pas confirmer; Vous devrez peut-être d'abord extraire la liste de leur Keys).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top