2011-04-26 3 views
12

Qu'est-ce que je fais mal ici? Je sais que le _id est dans la base de données mais j'ai un résultat vide.Ruby Mongo Driver - Find_by_Id

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

Merci

+0

-t-elle quoi que ce soit si retour vous exécutez la même chose à la main en DB? –

+0

@Vlad, j'utilise MongoHQ et en fait quand je recherche {_id: "4db2ebee90036f010b000001"} je n'obtiens aucun résultat. Cependant, je ne comprends pas pourquoi. La rangée est là. – donald

Répondre

16

Utilisez ceci:

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

@b contiendra un curseur, et non le résultat. Vous devez également utiliser un identifiant d'objet approprié.

Vous voulez sans doute ceci:

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

Avec Ruby 1.9.3 et MongoId 3.0.19

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

ou

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

trouver l'enregistrement. Ne sera jamais qu'un, _id est la clé primaire, il ne peut jamais être double.

1

Je voudrais utiliser quelque chose comme first qui renvoie un objet puisque vous avez de plus gros problèmes si votre ID primaire est dupliqué dans votre base de données. La syntaxe dépend de votre version mongo gem celle-ci est pour 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

L'utilisation, la version Ruby 2.3.1p112, mongo (pierre précieuse) 2.4.2 et BSON (pierre précieuse) 4.2.2

Les personnes suivantes ont travaillé pour moi

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