ho memorizzare i nostri log del server web in MongoDB e lo schema è simile a quanto segue:
[
{
"_id" : 12345,
"url" : "http://www.mydomain.com/xyz/abc.html",
....
},
....
]
Sto cercando di utilizzare l'operatore $project
per rimodellare questo schema un po 'prima di iniziare a passare la mia collezione attraverso una pipeline di aggregazione. Fondamentalmente, ho bisogno di aggiungere un nuovo campo chiamato "tipo" che verrà utilizzato in seguito per eseguire il raggruppamento. La logica per il nuovo campo è piuttosto semplice.
if "url" contains "pattern_A" then set "type" = "sales lead";
else if "url" contains "pattern_B" then set "type" = "existing client";
...
Sto pensando che avrebbe dovuto essere qualcosa di simile:
db.weblog.aggregate(
{
$project : {
type : { /* how to implement the logic??? */ }
}
}
);
So come fare questo usando la mappa-ridurre (impostando il "keyf" attributo a una funzione JS personalizzato che implementa la logica sopra) ma sto cercando di utilizzare lo new aggregation framework per farlo. Ho provato ad implementare la logica usando il expression operators ma finora non riuscivo a farlo funzionare. Qualsiasi aiuto/suggerimento sarebbe molto apprezzato!
Grazie per la risposta. Il tuo suggerimento è stata la prima cosa che ho tentato e ho raggiunto rapidamente un punto morto quando ho capito che non ero in grado di verificare l'esistenza di un modello di stringa usando gli operatori di stringhe supportati.Ho bisogno di qualcosa come indexOf() per cercare determinati pattern nell'URL. – Edenbauer
dove può avvenire la sottostringa nella "url"? È qualcosa che è possibile archiviare nel momento in cui inizialmente si scrive il documento? –
Sto avendo una situazione simile. Ho due campi A e B e la loro esistenza nel documento si escludono a vicenda. Devo raggruppare per A quando A esiste e raggruppare per B quando B esiste, ma sembra che tu non possa avere $ cond in un progetto $..Io ho provato a scrivere $ project in due modi: {$ project: {MyKey : {$ cond: [{$ exists: ["$ A", vero]}, "$ A", "$ B"]}}} e {$ progetto: {MyKey: {$ cond: [{" A ": {$ esiste: true}}," $ A "," $ B "]}}} Ma continuo a ricevere l'errore: { " errmsg ":" eccezione: operatore non valido '$ esiste' ", "codice": 15999, "ok": 0 } ... Forse è solo una fastidiosa cosa della sintassi :( –