web-dev-qa-db-fra.com

Comment sélectionner un seul champ dans MongoDB?

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.

141
Shipra Swati

À 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.

170
therealrootuser

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'

35
gowtham

Essayez la requête suivante:

db.student.find({}, {roll: 1, _id: 0}).pretty();

J'espère que cela t'aides!!

4
Karan Khanna

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);

`

4

Ç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

3
Aishwarya Panchal
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. 1 ou true pour inclure le champ dans les documents de retour.

  2. 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.

LIRE LA SUITE

2
Anthony Awuley

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})
2
PrabhuPrakash

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]';

1
Hasib Kamal

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
1
Vivek Doshi

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" } }

0
Sampath Surineni
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

0
Rito

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 }  )
0
Hari Krishna Setty

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
_
0
j3ff

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)

0
Pulla

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

0
Biju Maharjan