sql >> Databáze >  >> NoSQL >> MongoDB

Rails mongoid regex na poli Integer

Řešení MongoDB z propojené otázky by bylo:

db.models.find({ $where: '/^124/.test(this.number)' })

Věci, které můžete find namapujte skoro jedna ku jedné do Mongoidu:

where(:$where => "/^#{numero.to_i}/.test(this.number)")

to_i volání by mělo v tomto omezeném případě zajistit v pořádku interpolaci řetězců.

Mějte na paměti, že s vaší databází je to docela strašná věc:nemůže používat indexy, prohledá každý jednotlivý dokument v kolekci, ...

Možná by bylo lepší použít pole řetězce, abyste mohli provádět normální párování regulárních výrazů. Jsem si docela jistý, že MongoDB bude moci používat index, pokud na začátku ukotvíte svůj regulární výraz. Pokud opravdu potřebujete, aby to bylo číslo v databázi, můžete jej vždy uložit jako pole Integer i String:

field :number,   :type => Integer
field :number_s, :type => String

a pak mít nějaké háčky pro udržení :number_s aktuální jako :number Změny. Pokud byste to udělali, váš rozsah shody vzorů by vypadal na :number_s . Předpočítávání a duplikování dat, jako je tato, je u MongoDB docela běžné, takže byste se kvůli tomu neměli cítit špatně.



  1. textové vyhledávání mongodb s více poli

  2. Morphia List<Map<String,Object>>> return Embedded element není DBObject při operaci hledání

  3. Tečkový zápis vs. $elemMatch

  4. Aktualizujte více vnořené pole v Mongodb