61 votes

Comment interroger mongodb avec DBRef

supposons que j'ai la structure de données suivante :

 var user = {_id: 'foo', age: 35};
var post = {_id: '...', author: {$ref: user, $id: 'foo'},...};

Comment puis-je interroger tous les messages qui font référence à user[foo] ? J'ai essayé ce qui suit mais ne fonctionne pas :

 db.post.find('author._id': 'foo');
var u = db.user.find({_id: 'foo'});
db.post.find('author': u);

je ne trouve pas non plus la réponse dans le document officiel et sur google !

Quelqu'un a une idée ?

95voto

green Points 5032

J'ai compris:

 db.post.find({'author.$id': 'foo'})

16voto

Mrdev Points 21

Ce db.post.find('author.$id': 'foo') n'a pas le {} , donc la phrase correcte est :

 db.post.find({'author.$id': 'foo'})

Cela peut également être réalisé avec:

 db.post.find({'author': DBRef("user", ObjectId('foo'))})

Mais est plus compact et pratique la première façon.

3voto

dannrob Points 595

Pour tous ceux qui recherchent une solution Java à cela, si vous utilisez mongojack, c'est vraiment facile :

 collection.find(DBQuery.is("user", new DBRef(user.getId(), User.class)));

Où la collection est une JacksonDBCollection.

1voto

Kostanos Points 1126

Dans mongoengine, vous devez simplement utiliser l'instance de l'objet référencé. Il devrait avoir l'ID défini. Supposons que l'auteur soit l'instance du document Auteur. Donc en utilisant ceci :

 Post.objects(author__eq=author)

vous pouvez parcourir tous les messages de cet auteur. Post.author doit être défini comme ReferenceField

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X