web-dev-qa-db-fra.com

Comment puis-je rechercher un objet par son ObjectId dans la console?

J'ai trouvé la réponse à cette question pour C # et Perl, mais pas dans l'interface native. Je pensais que cela fonctionnerait:

db.theColl.find( { _id: ObjectId("4ecbe7f9e8c1c9092c000027") } )

La requête n'a renvoyé aucun résultat. J'ai trouvé le 4ecbe7f9e8c1c9092c000027 en faisant db.theColl.find() et en récupérant un ObjectId. Il y a plusieurs milliers d'objets dans cette collection.

J'ai lu toutes les pages que j'ai pu trouver sur le site Web mongodb.org et je ne les ai pas trouvées. Est-ce juste une chose étrange à faire? Cela me semble assez normal.

221
jcollum

Pas étrange du tout, les gens le font tout le temps. Assurez-vous que le nom de la collection est correct (la casse compte) et que l'ObjectId est exact.

La documentation est ici

> db.test.insert({x: 1})

> db.test.find()                                               // no criteria
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }      

> db.test.find({"_id" : ObjectId("4ecc05e55dd98a436ddcc47c")}) // explicit
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }

> db.test.find(ObjectId("4ecc05e55dd98a436ddcc47c"))           // shortcut
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }
352
Tyler Brock

Si vous utilisez Node.js:

> var ObjectId = require('mongodb').ObjectId; 
> var id = req.params.gonderi_id;       
> var o_id = new ObjectId(id);
> db.test.find({_id:o_id})

Edit: corrigé en nouvel ObjectId (id), pas nouvel ObjectID (id)

75
Mustafa Deniz

Encore plus facile, surtout avec la complétion par onglet:

db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c'))

Edit: fonctionne également avec la commande findOne pour une sortie plus jolie.

74
MPlanchard

Vous avez manqué d'insérer des citations doubles. La requête exacte est

db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } )
14
Mohamed Abdullah J

Je viens d'avoir ce problème et je faisais exactement ce qui était documenté et cela ne fonctionnait toujours pas.

Regardez votre message d'erreur et assurez-vous de ne pas avoir copié de caractères spéciaux. Je recevais l'erreur

SyntaxError: illegal character @(Shell):1:43

Lorsque je suis allé au caractère 43, ce n'était que le début de mon ID d'objet, après les guillemets ouverts, exactement comme je l'ai collé. J'ai mis mon curseur là-bas et appuyé sur la touche Retour arrière, rien ne semblait se passer s'il aurait dû supprimer le guillemet ouvert. J'ai de nouveau appuyé sur la touche Retour arrière pour supprimer la citation ouverte, puis la remettre et exécuter la requête. Elle a fonctionné, même si elle avait exactement la même apparence.

Je faisais du développement dans WebMatrix et copiais l'identifiant de l'objet depuis la console. Chaque fois que vous copiez depuis la console dans WebMatrix, vous risquez de détecter des caractères invisibles qui risquent de provoquer des erreurs.

3
Patrick Graham

Une fois que vous avez ouvert la CLI mongo, connectée et autorisée sur la bonne base de données.

L'exemple suivant montre comment trouver le document avec le _id = 568c28fffc4be30d44d0398e d'une collection appelée "produits":

db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")})
3
Oliver Wolf

Dans les fonctions Stitch MongoDB, vous pouvez utiliser BSON comme ci-dessous:

Utilisez l’assistant ObjectId du progiciel d’utilitaire BSON à cette fin, comme dans l’exemple suivant:

var id = "5bb9e9f84186b222c8901149";  
BSON.ObjectId(id);
1
kushal.8

Je pense que vous feriez mieux d'écrire quelque chose comme ça:

db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")})
1
mina_anwer