Skip to content
Marian Steinbach edited this page May 3, 2013 · 2 revisions

Hier werden einige nützliche MongoDB Statements für Abfragen und Aggregationen gesammelt.

Job Queue (queue)

Anzahl Jobs je Status

db.queue.aggregate(
	{
		$group: {
			_id: {
				rs: "$rs",
				status: "$status"
			},
			count: {$sum: 1}
		}
	},
	{
		$sort: { "_id.rs": 1}
	}
);

Dokumente (submissions)

Anzahl Dokumente nach Typ

db.submissions.aggregate(
	{
		$group: {
			_id: {
				type: "$type"
			},
			count: {$sum: 1}
		}
	}
);

Anzahl Dokumente nach Regionalschlüssel

db.submissions.aggregate(
	{
		$group: {
			_id: {
				rs: "$rs"
			},
			count: {$sum: 1}
		}
	}
);

Datei-Anhänge (attachments)

Anzahl Datei-Anhänge je Mime-Type mit Speicherplatz und mittlerer Dateigröße

db.attachments.aggregate(
    {
        $group: {
            _id: {
                mimetype: "$mimetype"
            },
            count: {$sum: 1},
            average_size: {$avg: "$size"},
            size_sum:  {$sum: "$size"}
        }
    }
);

Datei-Anhänge mit identischen Prüfsummen (Duplikate), sortiert nach Anzahl

db.attachments.aggregate(
    {
        $group: {
            _id: {
                sha1: "$sha1",
                size: "$size"
            },
            count: {$sum: 1}
        }
    },
    {
        $match: {
            count: {$gte: 2}
        }
    },
    {
        $sort: {count: -1}
    }
);

Summe des durch Duplikate belegten Speicherplatzes

db.attachments.aggregate(
    {
        $group: {
            _id: {
                sha1: "$sha1",
                size: "$size"
            },
            count: {$sum: 1}
        }
    },
    {
        $match: {
            count: {$gte: 2}
        }
    },
    {
        $group: {
            _id: "size",
            size: {
                $sum: "$_id.size"
            }
        }
    }
);

Bi-grams auf Basis von Volltexten erzeugen

// Mapper
var mapFunction = function() {
    var re = new RegExp("[ \t\n\.;,!:\(\)\/]+");
    var terms = this.fulltext.split(re);
    for (var n in terms) {
        var bigram = terms[n].toLowerCase();
        if (terms[n+1]) {
            bigram += " " + terms[n+1].toLowerCase();
            emit(bigram, 1);
        }
    }
};


// Reducer
var reduceFunction = function(bigram, count) {
    return Array.sum(count);
};

// Execution
db.attachments.mapReduce(
    mapFunction,
    reduceFunction,
    {
        out: "bigrams_mapreduce",
        query: {
            fulltext: {"$exists": true}
        }
    }
);