2013-05-13 15 views
9

Secondo il mongoid documentation sulla fusione esplicita ("Queryable # a - di default per intersecare") mi aspetterei la seguente query:intersecanti Mongoid "in" -Queries

Contact.in(id: ['a', 'b']).in(id: ['b', 'c']) 

ai risultati in qualcosa di simile:

=> #<Mongoid::Criteria 
    selector: {"_id"=>{"$in"=>["b"]}} 
    options: {} 
    class: Contact 
    embedded: false> 

Ma invece ottengo una sovrascrittura per tutti i casi immaginabili:

[1] pry(main)> Contact.in(id: ['a', 'b']).in(id: ['b', 'c']) 
=> #<Mongoid::Criteria 
    selector: {"_id"=>{"$in"=>["b", "c"]}} 
    options: {} 
    class: Contact 
    embedded: false> 

[2] pry(main)> Contact.in(id: ['a', 'b']).intersect.in(id: ['b', 'c']) 
=> #<Mongoid::Criteria 
    selector: {"_id"=>{"$in"=>["b", "c"]}} 
    options: {} 
    class: Contact 
    embedded: false> 

[3] pry(main)> Contact.in(id: ['a', 'b']).union.in(id: ['b', 'c']) 
=> #<Mongoid::Criteria 
    selector: {"_id"=>{"$in"=>["b", "c"]}} 
    options: {} 
    class: Contact 
    embedded: false> 

sto facendo un po ' cosa non va?

+2

abbastanza interessante, se uso il nome del campo diverso da 'id' -' _id' o qualsiasi nome di campo a caso, funziona correttamente. L'uso di '_id' nel tuo caso potrebbe essere un modo per andare, ma sembra ancora un bug. –

+0

In realtà, si comporterebbe in questo strano modo non solo con '_id' ma anche con alias di campo. Penso di sapere come risolverlo in Origin. –

+0

Questa è la soluzione, grazie. Funziona usando '' '_id'''. Devo aprire un problema per il progetto Origin su github? O poiché sai come risolverlo, apri una richiesta di pull? Sarebbe bello! – Phil

risposta

0

Il problema che si sta affrontando è causato dalla gemma Mongoide. L'aggiornamento all'ultima versione del gioiello Mongoid risolverà il problema.

Maggiori informazioni riguardo il bug può essere trovato qui

https://github.com/mongoid/origin/pull/83