397 Stimmen

Wie wählt man ein einzelnes Feld für alle Dokumente in einer MongoDB-Sammlung aus?

In meinem MongoDB habe ich eine Schülerkollektion mit 10 Datensätzen, die die Felder name und roll haben. Ein Datensatz dieser Kollektion ist:

{
    "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
    "name" : "Swati",
    "roll" : "80",
}

Ich möchte das Feld roll nur für alle 10 Datensätze in der Kollektion abrufen, so wie wir es in einer herkömmlichen Datenbank tun würden, indem wir verwenden:

SELECT roll FROM student

Ich habe viele Blogs durchgesehen, aber alle führen zu einer Abfrage, die eine WHERE-Klausel haben muss, zum Beispiel:

db.students.find({ "roll": { $gt: 70 })

Die Abfrage ist äquivalent zu:

SELECT * FROM student WHERE roll > 70

Meine Anforderung ist es, einen einzigen Schlüssel ohne Bedingung zu finden. Also, wie lautet die Abfrageoperation dafür.

1voto

Die Abfrage für MongoDB hier Gebühren ist Sammlung und Beschreibung ist ein Feld.

db.getCollection('fees').find({},{description:1,_id:0})

1voto

Verwenden Sie die Abfrage wie folgt in der Shell:

1. Verwenden Sie database_name

z.B.: use database_name

2. Dies gibt nur Assets zurück, die bestimmte Feldinformationen enthalten, wenn sie übereinstimmen. _id:0 gibt an, dass die ID nicht im Ergebnis angezeigt werden soll

db.collection_name.find( { "Suchfeld": "Wert" }, 
                  { "Anzuzeigendes_Feld": 1,_id:0 }  )

1voto

Himanshu Tariyal Punkte 224

Wenn Sie den MongoDB-Treiber in NodeJs verwenden, funktionieren die oben genannten Antworten möglicherweise nicht für Sie. Sie müssen etwas Ähnliches tun, um nur ausgewählte Eigenschaften als Antwort zu erhalten.

import { MongoClient } from "mongodb";

// Ersetzen Sie den URI-String durch die Verbindungszeichenfolge Ihrer MongoDB-Bereitstellung.
const uri = "";
const client = new MongoClient(uri);

async function run() {
  try {
    await client.connect();
    const database = client.db("sample_mflix");
    const movies = database.collection("movies");

    // Abfrage für einen Film mit dem Titel 'The Room'
    const query = { title: "The Room" };

    const options = {
      // Sortiere die übereinstimmenden Dokumente in absteigender Reihenfolge nach Bewertung
      sort: { "imdb.rating": -1 },
      // Enthalte nur die Felder `title` und `imdb` im zurückgegebenen Dokument
      projection: { _id: 0, title: 1, imdb: 1 },
    };

    const movie = await movies.findOne(query, options);

    /** Da diese Methode das übereinstimmende Dokument zurückgibt, nicht einen Cursor, 
     * drucken Sie es direkt aus 
    */
    console.log(movie);
  } finally {
    await client.close();
  }
}

run().catch(console.dir);

Dieser Code wurde aus der tatsächlichen MongoDB-Dokumentation kopiert, die Sie hier überprüfen können. https://docs.mongodb.com/drivers/node/current/usage-examples/findOne/

0voto

Pulla Punkte 21

In MongoDB 3.4 können wir die folgende Logik verwenden, ich bin mir nicht sicher über frühere Versionen

select roll from student ==> db.student.find(!{}, {roll:1})

Die obige Logik hilft, einige Spalten zu definieren (wenn sie weniger sind)

0voto

j3ff Punkte 5669

Bei der Verwendung von Studio 3T für MongoDB, wenn ich .find({}, { _id: 0, roll: true }) benutze, wird immer noch ein Array von Objekten mit einer leeren _id -Eigenschaft zurückgegeben.

Die Verwendung von JavaScript map hat mir geholfen, nur die gewünschte roll -Eigenschaft als Array von Strings abzurufen:

var rolls = db.student
  .find({ roll: { $gt: 70 } }) // Abfrage, bei der role > 70
  .map(x => x.roll);           // gibt ein Array von role zurück

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X