Dans ma MongoDB, j'ai une collection d'étudiants avec 10 enregistrements ayant des champs name
et roll
. Un enregistrement de cette collection est:
{
"_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
"name" : "Swati",
"roll" : "80",
}
Je souhaite récupérer le champ "roll" uniquement pour les 10 enregistrements des collections, comme nous le ferions dans une base de données traditionnelle en utilisant:
SELECT roll FROM student
J'ai parcouru de nombreux blogs mais tous aboutissent à une requête qui doit contenir la clause WHERE. Par exemple:
db.students.find({ "roll": { $gt: 70 })
La requête est équivalente à:
SELECT * FROM student WHERE roll > 70
Mon exigence est de trouver un seul champ sans aucune condition. Alors, quelle est l'opération de requête pour cela.
Merci d'avance.
À partir de de la documentation MongoDB :
Une projection peut explicitement inclure plusieurs champs. Dans l'opération suivante, la méthode find () renvoie tous les documents correspondant à la requête. Dans le jeu de résultats, seuls les champs item et qty et, par défaut, le champ _id sont renvoyés dans les documents correspondants.
db.inventory.find ({type: 'nourriture'}, {item: 1, quantité: 1})
Dans cet exemple des personnes chez Mongo, les documents retournés ne contiendront que les champs item
, qty
et _id
.
Ainsi, vous devriez pouvoir émettre une déclaration telle que:
db.student.find({}, {roll:1, _id:0})
L'instruction ci-dessus sélectionnera tous les documents de la collection des étudiants et le document retourné renverra uniquement le champ roll
(et exclura le _id
).
Si nous ne mentionnons pas _id:0
, les champs retournés seront roll
et _id
. Le champ '_id' est toujours affiché par défaut. Nous devons donc explicitement mentionner _id:0
avec roll
.
récupère toutes les données de la table sans _id
db.student.find({}, {_id:0})
SELECT * FROM student
récupère toutes les données d'un champ avec _id
db.student.find({}, {roll:1})
SÉLECTIONNER LE rouleau D'UN ÉTUDIANT
récupère toutes les données d'un champ sans _id
db.student.find({}, {roll:1, _id:0})
recherche les données spécifiées à l'aide de la clause where
db.student.find({roll: 80})
SELECT * FROM étudiants WHERE roll = '80'
trouver une donnée en utilisant une clause where et supérieure à condition
db.student.find({ "roll": { $gt: 70 }})
SÉLECTIONNER * DE L'ÉTUDIANT O lancer> '70'
trouve une donnée en utilisant la clause where et inférieure ou égale à la condition
db.student.find({ "roll": { $lte: 70 }})
SELECT * FROM student WHERE roll <= '70'
Trouver une donnée en utilisant la clause where et less than to condition
db.student.find({ "roll": { $lt: 70 }})
SELECT * FROM student WHERE roll <'70'
Essayez la requête suivante:
db.student.find({}, {roll: 1, _id: 0}).pretty();
J'espère que cela t'aides!!
Juste à des fins éducatives, vous pouvez également le faire avec l’une des méthodes suivantes:
1.
var query = {"roll": {$gt: 70};
var cursor = db.student.find(query);
cursor.project({"roll":1, "_id":0});
2.
var query = {"roll": {$gt: 70};
var projection = {"roll":1, "_id":0};
var cursor = db.student.find(query,projection);
`
Ça marche pour moi
db.student.find({},{"roll":1})
pas de condition dans la clause, c'est-à-dire à l'intérieur des premières accolades . à l'intérieur des accolades suivantes: liste des noms des champs de projection à utiliser dans le résultat et 1 indiquant que le champ particulier est la partie du résultat de la requête
db.<collection>.find({}, {field1: <value>, field2: <value> ...})
Dans votre exemple, vous pouvez faire quelque chose comme:
db.students.find({}, {"roll":true, "_id":false})
Projection
Le paramètre de projection détermine les champs retournés dans le fichier documents correspondants. Le paramètre de projection prend un document du formulaire suivant:
{ field1: <value>, field2: <value> ... }
The <value> can be any of the following:
1 ou true pour inclure le champ dans les documents de retour.
0 ou false pour exclure le champ.
REMARQUE
Pour le champ _id, il n'est pas nécessaire de spécifier explicitement _id: 1 à renvoie le champ _id. La méthode find () renvoie toujours le champ _id sauf si vous spécifiez _id: 0 pour supprimer le champ.
obtenir le nom de l'étudiant
student-details = db.students.find({{ "roll": {$gt: 70} },{"name": 1, "_id": False})
obtenir le nom et le rôle de l'étudiant
student-details = db.students.find({{ "roll": {$gt: 70}},{"name": 1,"roll":1,"_id": False})
Pour une meilleure compréhension, j'ai écrit une requête MySQL similaire.
Selecting specific fields
MongoDB: db.collection_name.find ({}, {name: true, email: true, téléphone: true});
MySQL: SELECT nom, email, téléphone FROM nom_table;
Selecting specific fields with where clause
MongoDB: db.collection_name.find ({email:'[email protected] '}, {nom: true, email: true, téléphone: true});
MySQL: SELECT nom, email, téléphone FROM nom_table WHERE email = '[email protected]';
Voilà, 3 façons de faire, Le plus court ennuyeux:
db.student.find({}, 'roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}).select('roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}, {'roll' : 1 , '_id' : 1 ); // <---- Old lengthy boring way
Pour supprimer un champ spécifique, utilisez l'opérateur -
:
db.student.find({}).select('roll -_id') // <--- Will remove id from result
Je veux juste ajouter aux réponses que si vous voulez afficher un champ imbriqué dans un autre objet, vous pouvez utiliser la syntaxe suivante
db.collection.find( {}, {{'object.key': true}})
Ici la clé est présente à l'intérieur de l'objet nommé objet
{ "_id" : ObjectId("5d2ef0702385"), "object" : { "key" : "value" } }
db.student.find({}, {"roll":1, "_id":0})
Ceci est équivalent à -
Sélectionner un rouleau d'étudiant
db.student.find ({}, {"roll": 1, "name": 1, "_id": 0})
Ceci est équivalent à -
Sélectionnez rouleau, nom de l'étudiant
Utilisez la requête comme ceci dans le shell:
1. Utilisez database_name
e.g: use database_name
2. Qui retourne uniquement les informations des champs particuliers des actifs lorsqu'il est mis en correspondance, _id:0
spécifie de ne pas afficher l'ID dans le résultat
db.collection_name.find( { "Search_Field": "value" },
{ "Field_to_display": 1,_id:0 } )
En utilisant Studio 3T pour MongoDB, si j’utilise .find({}, { _id: 0, roll: true })
, il retourne quand même un tableau d’objets avec une propriété vide __id
_.
Utiliser JavaScript map
m'a aidé à récupérer uniquement la propriété roll
souhaitée sous forme de tableau de chaînes:
_var rolls = db.student
.find({ roll: { $gt: 70 } }) // query where role > 70
.map(x => x.roll); // return an array of role
_
Dans Mongodb 3.4, nous pouvons utiliser la logique ci-dessous, je ne suis pas sûr des versions précédentes
sélectionnez roll from student ==> db.student.find (! {}, {roll: 1})
la logique ci-dessus aide à définir certaines colonnes (si elles sont moins)
Si vous voulez récupérer le champ "roll" uniquement pour les 10 enregistrements des collections ..__, essayez ceci.
Dans MongoDb:
db.students.find ({}, {"roll": {"$ roll"})
En Sql:
sélectionner le rouleau des étudiants