Не пытайтесь сделать хитроумные запросы (которые зачастую медленные), часто лучше сделать структуру документа где можно будет легко и быстро доставать данные.
Например для вашей задачи можно сделать так:
> db.qtest.insert({
date: Date("2013-01-14"),
name: "Roma",
tags:['python', 'ruby', 'c'],
counts: {python: 14, ruby:10, c:4 }
})
Поиск:
> db.qtest.find({tags: 'python'}, {date: 1, name:1, 'counts.python':1}).pretty()
{
"_id" : ObjectId("55a28f4624db1e49cecbc89f"),
"date" : "Sun Jul 12 2015 21:01:10 GMT+0500 (YEKT)",
"name" : "Roma",
"counts" : {
"python" : 14
}
}
Далее можете сделать индекс по тегам
db.qtest.ensureIndex({tags: 1})
, и этот запрос будет работать быстро когда коллекция будет большая.