Ist es möglich, ein einzelnes Dokument unter db.collection.aggregate
wie in db.collection.findOne
zu erhalten?Ist es möglich, ein einzelnes Ergebnis als Ganzes zu erhalten?
Antwort
Es ist möglich, $match
Bühne Aggregation Pipeline hinzuzufügen. Aber selbst wenn nur ein einziges Dokument gefunden wird, ist das Ergebnis immer noch eine Liste (in diesem Fall die Länge eins). Also die Antwort ist "NO, es ist nicht möglich".
Ja, es ist möglich. Fügen Sie einfach eine $group
Bühne mit _id
gleich null
hinzu. Dadurch werden die kumulierten Werte für alle Eingabedokumente als Ganzes berechnet. Z.B.
{ $group: { _id: null, total: { $sum: "$price" }}}
Oder wenn Sie nur ein Dokument aus aggregierten Ergebnisse erhalten möchten, können Sie $limit
:
{ $limit: 1 }
UPDATE: Beide Lösungen zurückkehren Cursor das Dokument haben. Aber denken Sie nicht an findOne
als etwas besonderes. Es ruft auch den Cursor ab und erhält nur das erste Dokument (falls vorhanden). Hier ist Mongo Mantel Umsetzung findOne
:
function (query , fields, options){
var cursor = this.find(query, fields, -1 /* limit */, 0 /* skip*/,
0 /* batchSize */, options);
if (! cursor.hasNext())
return null;
var ret = cursor.next();
if (cursor.hasNext()) throw "findOne has more than 1 result!";
if (ret.$err)
throw "error " + tojson(ret);
return ret;
}
Wie Sie sehen können, die es intern verwendet find
. Also, wenn Sie einzelnes Dokument anstelle von Cursor mit einem einzelnen Dokument erhalten möchten, können Sie Ihre eigene Funktion schreiben, die dasselbe mit aggregate
tut. Z.B.
> DBCollection.prototype.aggregateOne = function(pipeline) {
var cur = this.aggregate(pipeline);
if (!cur.hasNext())
return null;
return cur.next();
}
Verbrauch:
> db.collection.aggregateOne(...)
Leider bekomme ich immer noch ein Array mit einem Element – Erik
Bullseye (y), sehr schön erklärt. –
ja, es ist möglich. Sie müssen mongodb $match Betrieb verwenden
ex: das ist für mich gearbeitet.
{ $lookup: { from: 'user', localField: 'userId', foreignField: 'id', as: 'publisherDetails' } },
{ $match: { id } }
mondodb doc's Beispiel:
db.articles.aggregate(
[ { $match : { id : "132ada123aweae1321awew12" } },
{ $lookup: { from: 'user', localField: 'userId', foreignField: 'id', as: 'publisherDetails' } } ]
);
- 1. Ist es möglich, ein einzelnes Knotenobjekt zu untersuchen?
- 2. Ist es möglich, ein einzelnes Objekt in Smalltalk
- 3. Ist es möglich, einen TextClock-Wert als Zeichenfolge zu erhalten?
- 4. Tabelle als ein Enum. Ist es möglich?
- 5. pocketsphinx: lange Äußerung als einzelnes Ergebnis zurückgeben
- 6. Ist es möglich, ein lokales Plugin als Schmuckstück zu installieren?
- 7. ist es möglich, s3 ObjectSummary eines bestimmten Schlüssels zu erhalten?
- 8. Kann ich NDepend anweisen, ein einzelnes Ergebnis zu ignorieren?
- 9. NULL als Ergebnis erhalten
- 10. Ist es möglich, ein Pseudozufall zu teilen
- 11. Ist es möglich, OpenCover/Ergebnis in SonarQube zu importieren?
- 12. WPF - Ist es möglich, das Ergebnis eines Datenbindungsausdrucks zu negieren?
- 13. Java JNI - Ist es möglich, ein einzelnes primitives Array-Element in Java aus C++ zu setzen?
- 14. Ist es möglich, ein Icon zu verschieben?
- 15. Ist es möglich, ein Einlaufen zu erkennen?
- 16. Ist es möglich, Variable als @JsonRootName zu verwenden?
- 17. Ist es möglich, den Adressbucheintrag des aktuellen Benutzers zu erhalten?
- 18. Ist es möglich, __repr__ von Wahr als Falsch zu ändern?
- 19. Ist es möglich, ein Bild mit TImage und GDIPlus zu öffnen und vollständige Transparenz zu erhalten?
- 20. Ist möglich, ein Gatling-Ergebnis als Jmeter Ansicht Ergebnis Baum Format
- 21. Ist es möglich, ein animiertes Zeichenfeld zu haben?
- 22. Ist es möglich, Dateizugriff mit Flash-Player-Laufzeit zu erhalten?
- 23. Ist es möglich, Telefonnummer mit Google plus API zu erhalten
- 24. Ist es möglich, Makroargumente als reguläre Ausdrücke zu behandeln?
- 25. Wie Vektorelemente als Ganzes übereinstimmen
- 26. Ist es möglich, eine ungepufferte Webbrowser-Ausgabe zu erhalten?
- 27. Ist es möglich, Google Analytic Zielwert nach Datum zu erhalten?
- 28. Ist es möglich, Datensatznamen als Parameter in Erlang zu verwenden
- 29. Ist es möglich, den Pfad eines gespeicherten Cookies zu erhalten?
- 30. Drag and Drop - Ist es möglich, die URL zu erhalten?
Es ist nicht wirklich klar, was Sie hier fragen. Insbesondere sollten Sie erklären, was Sie tun möchten. Übrigens ist die bisher gegebene Antwort in den meisten Fällen falsch. –