È possibile ottenere un singolo documento su db.collection.aggregate
come in db.collection.findOne
?È possibile ottenere risultati singoli in forma aggregata?
risposta
È possibile aggiungere lo stadio $match
alla pipeline di aggregazione. Ma anche se corrisponderà a un solo documento, il risultato sarà comunque un elenco (di lunghezza uno in quel caso). Quindi la risposta è "NO, non è possibile".
Sì, è possibile. Basta aggiungere uno stage $group
con _id
uguale a null
. Questo calcolerà i valori accumulati per tutti i documenti di input nel loro complesso. Per esempio.
{ $group: { _id: null, total: { $sum: "$price" }}}
Oppure, se si vuole ottenere un solo documento dai risultati aggregati, è possibile utilizzare $limit
:
{ $limit: 1 }
UPDATE: Entrambe queste soluzioni restituiscono cursore che avrebbe unico documento. Ma non pensare a findOne
come qualcosa di speciale. Recupera anche il cursore e ottiene solo il primo documento (se presente). Ecco mongo implementazione guscio di 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;
}
Come si può vedere, si utilizza internamente find
. Quindi, se vuoi ottenere un singolo documento invece del cursore con un singolo documento, puoi scrivere la tua funzione che fa lo stesso con aggregate
. Per esempio.
> DBCollection.prototype.aggregateOne = function(pipeline) {
var cur = this.aggregate(pipeline);
if (!cur.hasNext())
return null;
return cur.next();
}
Usage:
> db.collection.aggregateOne(...)
Purtroppo ottengo ancora un array con un elemento – Erik
Bullseye (y), molto ben spiegato. –
sì è possibile. è necessario utilizzare l'operazione mongodb $match
ex: questo ha funzionato per me.
{ $lookup: { from: 'user', localField: 'userId', foreignField: 'id', as: 'publisherDetails' } },
{ $match: { id } }
mondodb doc's esempio:
db.articles.aggregate(
[ { $match : { id : "132ada123aweae1321awew12" } },
{ $lookup: { from: 'user', localField: 'userId', foreignField: 'id', as: 'publisherDetails' } } ]
);
- 1. Ottenere Github collaboratori singoli file
- 2. SQL Server: sp_MSforeachdb in set di risultati singoli
- 3. È possibile creare questa semplice forma in Android XML?
- 4. Query aggregata e non aggregata combinata in SQL
- 5. Ottenere i risultati migliori in un JOIN
- 6. Perché ottenere risultati diversi con l'inferenza argomento MALLET per singoli e batch di documenti?
- 7. È possibile ottenere la posizione di un record in una tabella dei risultati SQL?
- 8. SQL - Sottoquery in funzione aggregata
- 9. Come posso ottenere/impostare singoli bit in un float?
- 10. Ottenere risultati univoci in Hibernate
- 11. nhibernate queryover join con subquery per ottenere la colonna aggregata
- 12. La radice aggregata con gerarchia profonda è appropriata in DDD?
- 13. MySQL - È possibile ottenere "la differenza" tra due risultati di query?
- 14. Ottenere i singoli fotogrammi che utilizzano CV_CAP_PROP_POS_FRAMES in cvSetCaptureProperty
- 15. È possibile ottenere una serie di buoni risultati e un'eccezione generata da Moq
- 16. Query aggregata Mongodb con non in
- 17. DDD: domanda radice aggregata
- 18. Come ottenere singoli campi da JSON in PHP
- 19. Come sfuggire apici singoli in doppi apici in singoli apici
- 20. È possibile avere più produttori, consumatori singoli in un'impostazione senza blocco?
- 21. Un test watcher di riportare i risultati dei singoli test in JUnit Suite
- 22. selettore jQuery per ottenere forma per nome
- 23. È possibile utilizzare l'API di Dropbox per caricare su Dropbox di singoli utenti?
- 24. È possibile che la funzione Lua richieda più risultati?
- 25. È possibile appiattire la query sui risultati di MongoDB?
- 26. come ottenere risultati da onActivityResult in Fragment?
- 27. È possibile inserire solo un elemento di forma di rotaie in un parziale?
- 28. Non è possibile ottenere currentUser sul carico
- 29. È possibile ottenere l'output di un processo
- 30. non è possibile ottenere ui: lavoro immagine
In realtà non è chiaro che cosa si sta chiedendo qui. Nello specifico dovresti spiegare cosa vuoi fare. A proposito la risposta data finora è sbagliata per la maggior parte dei casi. –