我试图在Meteor mongo db中找到有关用户的一些信息。
我安装了角色包,我想查找管理员用户,业务用户,消费者等的数量。
"作用"就像用户"电子邮件"属性是一个数组。
例如,如果我想在roles数组中找到admin用户的数量,我该怎么做呢。我想象它会是这样的:
Meteor.users.find({roles: ['admin']}).count()
谢谢
答案 0 :(得分:4)
我认为你的文件格式实际上是这样的:
{ "name": "Bill", "roles": [ "admin", "user" ] }
{ "name": "Ted", "roles": [ "admin", "user", "moderator" ] }
{ "name": "Death", "roles": [ "user", "moderator" ] }
在这种情况下,一个查询指定查找" admin"像这样:
Meteor.users.find({ "roles": ["admin"] }).count()
根本不匹配任何文件,因为此表格需要" admin"成为数组中唯一的元素。这就是您的查询基本上以"完全匹配"的形式提出的要求。对于"角色"中的内容。
Meteor仍然适用MongoDB的基本规则,即使目前浏览器客户端的minimongo目前还不支持所有运营商。但是,您的查询实际上非常简单,假设该数据对于每个用户的每个角色都是唯一的。就像这样发出:
Meteor.users.find({ "roles": "admin" }).count()
只要角色数组中的一个元素实际匹配" admin"那么该文件将在结果中计算。
一个常见的错误观念是"数组"必须使用特殊运算符进行查询。事实上,$in
和$nin
以及其他运营商和其他运营商都采用了#34;数组"测试元素的参数。除了$all
之外,大多数运营商都不需要将应用于数组,并且可以应用于"任何"领域。除非你需要一次测试多个值的存在,否则它们都没有意义。
如果您只需要管理员,则查询如图所示。如果你需要 "用户" 或" admin"使用$in
:
Meteor.users.find({ "roles": { "$in": ["user", "admin"] } }).count()
"比尔"或者" Ted" in" name",这不是数组:
Meteor.users.find({ "name": { "$in": ["Bill", "Ted"] } }).count()
或者,如果您需要两者" admin"和#34;主持人"在数组中使用$all
Meteor.users.find({ "roles": { "$all": ["moderator", "admin"] } }).count()
但是,除非您要测试多个值,否则您通常不需要 这些运算符。所以只需测试值
答案 1 :(得分:3)
您可以执行此操作,请记住在服务器中执行它,因为minimongo不支持所有查询...
Meteor.users.find({ roles: { $all: [ "admin"] } }).count();
$ all运算符选择字段值为包含所有指定元素的数组的文档。要指定$ all表达式,请使用以下原型:
http://docs.mongodb.org/manual/reference/operator/query/all/#op._S_all