2012-09-14 17 views
10

Abbiamo un modello di entrata con un elemento incorporato:Mongoid 2.4 query per documento incorporato per ID mancanza

class Entry 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Spacial::Document 
    embeds_many :items, cascade_callbacks: true 
... 

class Item 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Spacial::Document 
    embedded_in :entry 
... 

Se interrogo mongo direttamente una voce per voce ID:

{"items._id" : ObjectId("50536b18baa072000f000360")} 

Riporta Entry:

505363b36181ce00020006b1 { "created_at": "2012-09-14T17: 04: 51Z", "voci": [{ "_ id": "50536b1a2b17b3 .. .

Eppure, quando interrogo via Mongoid:

irb(main):002:0> Entry.where('items._id' => '50536b18baa072000f000360')[0] 
=> nil 

Tutte le altre richieste di lavoro (per gli altri campi di oggetti e per i campi in ingresso). Ma non per l'id.

Stiamo eseguendo mongolo (2.4.12).

risposta

19

A quanto pare si devono avvolgere il ID in BSON :: ObjectId(), in modo da:

Entry.where('items._id' => BSON::ObjectId('50536b18baa072000f000360'))[0] 

Altrimenti mongo sarà sporatically non restituire il risultato.

+9

o nel mio caso, 'ciclomotore :: :: BSON ObjectId ('50536b18baa072000f000360')', al fine di curare 'metodo non definito \' __bson_dump__' per BSON :: ObjectId'. Meno male! –

+0

Usa ciclomotore :: BSON :: ObjectId in Mongolo 3 – Obie

+1

Questo non funzionerà con Mongoid 4.0.0.beta1 –

0

Entry.where('items._id' => Moped::BSON::ObjectId('50536b18baa072000f000360'))[0] vedere la documentazione here

-3

alternativa, questo funziona anche.

Entry.find('50536b18baa072000f000360') 
Problemi correlati