流星:在mongodb集合中查找数据

时间:2014-09-13 01:08:54

标签: mongodb meteor mongodb-query

我试图在Meteor mongo db中找到有关用户的一些信息。

我安装了角色包,我想查找管理员用户,业务用户,消费者等的数量。

"作用"就像用户"电子邮件"属性是一个数组。

例如,如果我想在roles数组中找到admin用户的数量,我该怎么做呢。我想象它会是这样的:

Meteor.users.find({roles: ['admin']}).count()

谢谢

2 个答案:

答案 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