Qual è il modo migliore per restituire tutti i documenti in una raccolta se si desidera document.a == document.b?
Ho provato
db.collection.aggregate([ { $match: { $eq: [ '$a', '$b' ] } }])
ma restituisce senza errori o risultati, perché suppongo che è letteralmente la corrispondenza stringhe "$ A" e "$ b". C'è un modo diverso per specificare che questi sono campi?
db.collection.aggregate([ { $project: {
eq: { $cond: [ { $eq: [ '$a', '$b' ] }, 1, 0 ] }
} },
{ $match: { eq: 1 } }])
Quanto sopra funziona, ma richiede il passaggio aggiuntivo di interrogazione di nuovo con tutti i documenti trovati o la proiezione di tutti i campi possibili.
Esiste un modo migliore per raggiungere questa query?
Grazie alla tua domanda e il modo di usare per sostituire corrispondenza, ho risolvere uno dei miei problemi! Infatti, ho usato '$ addFields' invece di' $ project', per mantenere la struttura del database come la corrispondenza. – NatNgs
È possibile utilizzare l'espressione di aggregazione nella query regolare in 3.6. Qualcosa come 'db.collection.find ({" $ expr ": {" $ eq ": [" $ a "," $ b "]}})' e in aggregazione con 'db.collection.aggregate ({" $ match ": {" $ expr ": {" $ eq ": [" $ a "," $ b "]}}})' – Veeram