2017-07-18 56 views
0

我正在用{{#each user}}在网页上显示来自Meteor.users.find()的所有用户。但是,我想根据邮政编码限制我的搜索。使用Meteor和MongoDB查找基于ID数组的用户

  1. 用户输入邮编。
  2. 查找城市名称的邮政编码。
  3. 查找该城市内的所有邮编。
  4. 查找所有在该城市拥有任何邮编的用户。
  5. 列出页面上的所有用户。

    // Step 1: User input (OK) 
    input_zip = '1234'; 
    // Step 2: Get city name for this ZIP (OK) 
    var zip_place = Locations.findOne({ zipCode: input_zip })['place']; 
    // Step 3: Get all zip codes in that city (OK) 
    var zip_codes = Locations.find({ place: zip_place }).fetch(); 
    // Step 4 (I'm aware this syntax is totally wrong, but you get the idea) 
    var zip_users = Meteor.users.find({ profile.zipcode: zip_codes }).fetch(); 
    
    // Step 5: List users on page with zip codes in that array. 
    
    {{#each user in zip_users}} 
        <p>bla bla</p> 
    {{/each}} 
    

什么是从一个数组值搜索用户的最有效方法是什么?完整的代码示例将不胜感激。谢谢。

回答

2

哟可以使用$在运营商为此目的。

Meteor.users.find({ 'profile.zipcode':{$in: zip_codes} }).fetch(); 

有关操作$更多信息,请到mongo manual

+0

确定。这工作,如果我手动创建一个数组像myArray = ['1234','5678']。 var zip_codes = Locations.find({place:zip_place},{fields:{'zipCode':1}})。fetch();创建一个对象数组,而不是一组zipcode。 我怎样才能得到它作为字符串创建一个普通的zipcodes数组?在提取之前的末尾['zipCodes']不能像findOne那样工作。谢谢。 – user3323307

+0

我使用.map函数修复了它。 – user3323307