2012-05-10 9 views
6

Wie überprüfen Sie, ob ein eingebettetes Dokument für ein Dokument mit Mongoid in Ruby on Rails existiert? Angenommen, ich habe ein Dokument user mit name, email und möglicherweise ein eingebettetes Dokument nicknames. Gerade jetzt, wenn ich user.first.nicknames ausführen und wenn das user nicht das eingebettete Dokument nicknames darin hat, wird es Fehler heraus. Ich habe versucht matches? und exists?, aber sie funktionieren nicht.Wie überprüfen Sie, ob ein eingebettetes Dokument in einem Dokument in Mongoid existiert?

Danke!

Antwort

3

Dies sollte true zurückgeben, wenn es nicht User.first.nicknames.nil? existiert, und dies wird wahr zurück, wenn es vorhanden ist: User.first.nicknames.present?

+0

Diese beiden funktionieren nicht in einem MongoDB-Dokument, das keine Spitznamen hat. Es erzeugt einen Fehler "NoMethodError: undefined Methode' Nicknames "". Dies funktioniert für Dokumente, die 'Spitznamen' haben. – Goalie

+0

Das ist nicht was meins tut, ich benutze MongoId 2.3.3. Es scheint mir, dass der 'User.first' eigentlich null ist. Sie versuchen also, Spitznamen auf einem Null-Objekt zu nennen. Kannst du das verifizieren? – ctcherry

0

sollte so einfach sein wie {"user":{"$exists":"nicknames"}}

+0

Ist das ein Mongo-Shell-Befehl? Ich suche nach einer Lösung in Ruby on Rails. – Goalie

2

Sie User.where(:nicknames.exists => true).include?(user) tun können.

User.where(:nicknames.exists => true) werden nur die Dokumente zurückgeben, die nicknames enthalten.

8

Mit ein wenig Hilfe von den anderen Antworten hier, fand ich etwas, das für mich funktionierte und ich denke, das ist, was das ursprüngliche Plakat im Sinn hatte;

Model.where(:"subdoc.some_attribute".exists => true) 

Dies wird alle Dokumente, in denen die „some_attribute“ auf dem Filialdokument ist. Beachten Sie die Syntax des Symbols, das ist, was ich vermisste.

+0

Sie können auch die Assoziation durchlaufen: 'Model.docs.where (: field.exists => true)'. –

+0

Das ist, was ich den ganzen Tag gesucht habe. Es ist nirgendwo dokumentiert !? – fre2ak

Verwandte Themen