Javascript .find()如何查找并返回所有用户名?

时间:2015-03-27 00:08:30

标签: javascript mongodb meteor find

我正在学习Meteor,希望获得所有用户名 我试过这个:Meteor.users.find({}, {"name" : 1}).fetch() 以及这方面的许多变化。我总是在MongoDB中获取整个对象。但我只想获得所有干净的用户名!怎么可能? 我用谷歌搜索和谷歌搜索,但不明白任何事情:(

2 个答案:

答案 0 :(得分:2)

你有点亲近,至少在正确的轨道上。这是我将如何做到的。

对于初学者,name不是默认字段,通常这是放在用户文档的profile子文档中。像这样:

{ 
    "_id" : "FkYj9MkLY2TmcDf7w",
    "emails" : [  
        {  "address" : "your@email.com",  "verified" : false } 
    ], 
    "profile" : { 
        "name" : "Bob Loblaw",
        "position" : "Attorney at law"
    }
}

仅供参考。为简洁起见,我在上述示例中省略了典型的密码和服务相关细节。

要检索名称,请执行以下操作:

Template.yourTemplate.helpers({
    'users': function() {
        return Meteor.users.find({});
    }
});

然后在模板中显示名称:

{{#each users}}
    {{profile.name}}
{{/each}}

如果要访问JavaScript中的名称而不是模板:

var users = Meteor.users.find({}).fetch();
_.each(users, function(user) {
    if(user.profile.name)
        console.log(user.profile.name);
});

因此,您通常可以使用点表示法访问文档字段:

Meteor.users.findOne({}).profile.name

请注意,在访问字段之前检查查询是否返回结果通常是个好主意(如上所示)。

最后,有一种方法可以检索所有已设置名称的用户,并排除那些不知道的用户。

Meteor.users.find({'profile.name': {$exists: true}})

最后要注意的是'profile.name'是引号,因为字段名称包含.。这还将向您展示如何在查询本身中使用点表示法访问子文档字段。

答案 1 :(得分:0)

你很亲密。根据{{​​3}},find方法接受两个参数 - 选择器和选项对象。

要返回name属性,您需要执行以下操作:

Meteor.users.find({},{fields:{'name':1, _id: 0}}).fetch()