2017-01-31 2 views
1

Ich benutze eine MongoDB für eine neue Anwendung, die ich erstelle, und ich brauche nur bestimmte Daten davon. Ich benötige die folgenden Felder: current (boolean), Position, Sektor und Name. Das Positionsfeld wird mit einem von vier Werten gefüllt - "Bargeld, SPVR, AUS und Training", während das Sektorfeld einen von zwei Werten aufweist - "Pause oder Arbeit". Ich möchte eine Abfrage, die mir alle Datensätze gibt, in denen die folgenden Bedingungen vorliegen: 1. current = TRUE 2. Position = "SPVR" oder "CASH" OR Sector = "BREAK" und 3. Name ist nicht NULLMongoid Abfrage mit AND und OR Bedingung

Das Problem, das ich habe, ist, dass es Hunderte von Datensätzen gibt, die den Wert BREAK haben, aber die meisten von ihnen haben keinen Wert im Feld Name. Ich möchte keine Datensätze, die keinen Namen haben. Also, in dieser Hinsicht, in Zeile 2 oben, ich denke, das OR könnte UND sein?

Dies ist mu aktuelle Start bei der Mongoid Anweisung

get '/currentstate*' do 
    StateTransaction.where(current: true, :position.in =>["SPVR", "CASH"]).to_json 

    end 

Jede Hilfe wäre sehr geschätzt.

Danke !!

+0

ich dies in einer Abfrage-Anweisung durchgeführt werden kann, nicht zu denken fange an. Es gibt nichts, was ich gelesen habe, das zeigt, dass es möglich ist. Ich kann any_of für den OR-Teil verwenden, aber dann wird das AND weggelassen. Ich werde einen anderen Weg versuchen. – user2843365

Antwort

2

Es sollte

arbeiten
StateTransaction.where(current: true, :name.ne => ["",nil]).and(
    StateTransaction.or(
    {:position.in =>["SPVR", "CASH"]}, 
    {sector: "BREAK"} 
).selector 
) 
+0

Danke für die Hilfe, aber leider hat es nicht funktioniert. Es scheint, dass die Abfrage immer noch nach Datensätzen sucht, bei denen die Position SPVR oder CASH UND der Sektor BREAK ist. Wenn ich Sektor: "BREAK" zu einem anderen Feld wie E-Mail ändern: "[email protected]", dann wird es mir alle Datensätze finden, bei denen beide Bedingungen erfüllt sind (Position = SPVR und E-Mail = [email protected]) von dem einen oder anderen. – user2843365

+0

@ user2843365 Ich habe die Antwort aktualisiert –

+0

Funktioniert gut! Ich danke dir sehr!! – user2843365