Из вашего примера я понимаю, что вы используете имена тегов в качестве ключей (или полей) в коллекции tagviews.
Не делайте этого , что оставляет вас в кошмаре, когда вам нужно создать индексы. Вместо этого создайте теги как внедренный документ в пределах tagviews
tagviews{
_id : 'xxxx',
tags : [
{
name : "foo",
count : 0
},
{
name : "bar",
count : 0
},
{
name : "baz",
count : 0
}
]
и вы можете эффективно индексировать этот документ по имени тега, чтобы использовать его в своих фильтрах
db.tagviews.ensureIndex('tags.name',1)
И вы можете увеличить вид конкретного тега пользователя на
db.tagviews.update({_id : "userid" , "tags.name":'foo'},{$inc:{"tags.$.count":1}})
когда твой пользователь наткнулся на его интересы.
Итак, на ваш настоящий вопрос,
как получать пользователей, основываясь на критериях тегов. Например. у нас есть Google
Galaxy Nexus есть в наличии по привлекательной цене и хочу отправить
маркетинговые электронные письма пользователям, наиболее заинтересованным в [Android, телефоны,
гаджеты, Google].
вы можете отфильтровать его как
db.tagviews.find({'tags.name':{$in : ['android', 'phones','gadgets','google'] }})
При этом будут извлечены все пользователи, которые заинтересованы в вышеуказанных тегах.
или даже вы можете использовать счетчик для фильтрации наиболее точных данных
db.tagviews.find({'tags.name':{$in : ['android', 'phones','gadgets','google'] },'tags.count' : {$gt : 0 }})
надеюсь, это поможет