Conception de schéma MongoDB - Trouver les derniers commentaires sur tous les articles de blog filtrés par l'utilisateur
-
14-11-2019 - |
Question
J'essaie de reproduire le schéma de blog classique de l'un Post
trop Comment
s 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 SiteUser
La page d'accueil des X derniers commentaires SiteUser
Les 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 SiteUser
s):
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
- configurer un index sur
Post
pourComments.commenter
De l'intérieur de Morphia - Construisez réellement la requête ci-dessus
La solution
Soit mis
@Indexes(@Index("comments.commenter"))
sur lePost
classe, ou@Indexed
sur lecommenter
champ duComment
classe (MorphiaDatastore.ensureIndexes()
se reproduira dans les classes et créera correctement lecomments.commenter
index sur lePost
le recueil)je pense
ds.find(Post.class, "comments.commenter in", users)
travaillerait,ds
être unDatastore
etusers
tonList<SiteUser>
(Je n'utilise pas@Reference
Cependant, je ne peux donc pas confirmer; Vous devrez peut-être d'abord extraire la liste de leurKey
s).