2013-05-13 12 views
9

Według mongoid documentation o wyraźne łączących („Queryable # w - domyślne przecinają”) Spodziewam się następujące zapytanie:przecinających Mongoid „w” -Queries

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

aby spowodować coś takiego:

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

Ale zamiast tego dostaję nadpisanie wszystkich przypadkach można sobie wyobrazić:

[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> 

robię niektóre coś nie tak?

+2

Ciekawe wystarczy, jeśli mogę użyć nazwy pola innego niż '' _id' id' - ani żadnego losową nazwę pola, to działa poprawnie. Używanie '_id' w twoim przypadku może być sposobem, ale nadal wygląda jak błąd. –

+0

Właściwie zachowywałoby się to w ten dziwny sposób nie tylko z '_id', ale również z aliasami pól. Myślę, że wiem, jak to naprawić w Origin. –

+0

To jest rozwiązanie, dzięki. Działa za pomocą '' _id'''. Czy powinienem otworzyć problem dotyczący projektu Origin na githubie? Lub skoro wiesz, jak to naprawić, czy otwierasz prośbę o wyciągnięcie? Byłoby wspaniale! – Phil

Odpowiedz

0

Problem, który napotykasz, jest spowodowany klejnotem Mongoid. Aktualizacja do najnowszej wersji klejnotu Mongoid rozwiąże problem.

Więcej informacji na temat błędów można znaleźć tutaj

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