2011-04-26 9 views
12

¿Qué estoy haciendo mal aquí? Sé que _id está en la base de datos pero obtengo un resultado vacío.Ruby Mongo Driver - Find_by_Id

@b = coll.find("_id" => "4db2ebee90036f010b000001") 

Gracias

+0

¿Vuelve nada si ¿ejecutas lo mismo a mano en db? –

+0

@Vlad, estoy usando MongoHQ y, de hecho, cuando busco {_id: "4db2ebee90036f010b000001"} no obtengo ningún resultado. Sin embargo, no entiendo por qué. La fila está ahí. – donald

Respuesta

16

Utilice esta:

coll.find(:_id => BSON::ObjectId('4db2ebee90036f010b000001')).each do |data| 
    puts data.inspect 
end 
9

@b contendrá un cursor, no el resultado. También necesita usar una identificación de objeto adecuada.

es probable que desee esto:

@b = coll.find_one(:_id => BSON::ObjectId('4db2ebee90036f010b000001')) 
2

con Ruby 1.9.3 y MongoId 3.0.19

@coll = Coll.find(hash["_id"]) 

o

@coll = Coll.find("511296d2dfa18f07fa000009") 

encontrar el registro. Solo será uno, _id es la clave principal, nunca puede ser doble.

1

Usaría algo como first que devuelve un objeto ya que tiene problemas mayores si su identificación principal está duplicada en su base de datos. La sintaxis depende de la versión de tu mongo gem, esta es para 2.1.0.

your_id = '4db2ebee90036f010b000001' 
db = Client.new([ "localhost:27017" ], :database => "db") 
coll = db[:testCollection] 
res = coll.find(:_id => BSON::ObjectId(your_id)).first 
0

Uso, Ruby versión 2.3.1p112, mongo (GEM) y 2.4.2 BSON (GEM) 4.2.2

Los siguientes trabajó para mí

client = Mongo::Client.new(['127.0.0.1:3001'], :database=>'dbname') 
collection = client[:users] 
user = collection.find({_id:'XY3h5R7aJkh5FxFhJ'}).first