У меня есть коллекция пользователей, каждая из которых может быть подписана на одну или несколько служб. Каждая служба имеет некоторые метаданные, включая количество кредитов, которые пользователь имеет для этой услуги.Mongodb точка обозначение подстановочные знаки?
Как я могу найти все пользовательские объекты, которые имеют менее 50 кредитов для какой-либо службы, если у меня нет способа узнать, какие ключи объектов службы будут?
Концептуально, это было бы что-то подобное, что не работает:
db.users.find({services.*.credits : {$lt : 50}})
Коллекция пользователей:
{
_id: 4f0ea25072139e4d2000001f,
services : {
a : { credits : 100, score : 2000 },
b : { credits : 200, score : 300 },
c : { credits : 10, score : 1300 }
}
},
{
_id: 4f0ea25072139e4d2000001f,
services : {
f : { credits : 68, score : 14 },
q : { credits : 1000, score : 102 },
z : { credits : 59, score : 352 }
}
}
Другой пример того, что я хочу сделать, в случае, если это не здесь явствует здесь: http://www.mongodb.org/display/DOCS/Advanced+Queries#comment-346075854
я в конечном итоге изменить нашу схему, чтобы просто использовать массив. Я мог бы использовать $ elemMatch, но поскольку мне нужно было только соответствовать по одному критерию, я смог сделать: 'db.users.find ({services.credits: {$ lt: 50}})' – stuporglue
-1, потому что это не ответ на вопрос. Не у всех есть возможность изменить схему данных, с которыми они работают. Этот вопрос остается без ответа. – CommaToast
ОК, я ответил сам. Нашел способ сделать это. Опубликовано ниже. – CommaToast