【问题标题】:mongoDB select from collection with relationmongoDB 从有关系的集合中选择
【发布时间】:2013-06-19 08:56:34
【问题描述】:

我需要从查询中选择对应数据的用户。

我的数据库中有这个集合(两行或更多行也是我的查询的输出)

> db.Friends.find()
{ "userId" : "k3XCWdN5M2pbzBiFD", "followeeId" : "3MTmHcJNEzaaS8hrd","_id" :  "aiRD.." }
{ "userId" : "k3XCWdN5M2pbzBiFD", "followeeId" : "SoTozuZ4nWooRBeFz","_id" :  "QingX.."    }

当 findOne(...) 只有一个结果时,第二个查询将如下所示:

users.findOne({ _id: firstQueryResult.followeeId })

但现在的问题是......当我没有只有一个 followeeId 而是更多的时候,我如何从用户集合中选择用户?

请有人给我看一个代码示例。

我的研究: 这是一个好的解决方案吗?

friendsData.forEach(function(relationShip) {
    followeeIds.push(relationShip.followeeId);
});
console.log(followeeIds);

【问题讨论】:

    标签: mongodb select collections


    【解决方案1】:

    好吧,我终于找出问题所在了。对于下一个读者:

    1. 检查自动发布是启用还是禁用。
    2. 如果禁用,您需要从数据库发布集合

      Meteor.publish("userData", function () {
          return Meteor.users.find({},
                         {fields: {'username': 1}});
      });
      

      PS:我只想发布用户名字段,仅此而已!

    3. 您还需要订阅数据!

      Meteor.subscribe("userData");
      
    4. 现在您可以通过这种方式访问​​其他用户的数据:

      users= Meteor.users.findOne({username: "Nolifer"});
      
    5. 对于我最初的问题......我可能会使用这个函数来迭代超过一行的结果(它更多的是一个 SQL 术语,但我不确定在 mongoDb 中使用什么术语可能是一个文档?随便):

      users.forEach(function(user) {
          console.log(user);
      });
      

    就是这样!

    P.S.:我认为这没有错,但我知道的对吗? :) 所以如果有人知道更好的方法,请发表评论。如果不告诉我它是否对你有用:)

    【讨论】:

      【解决方案2】:

      根据mongo手册,使用$in操作数:http://docs.mongodb.org/manual/reference/operator/in/#op._S_in

      db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
      

      【讨论】:

      • 因为它返回: ["3MTmHcJNEzaaS8hrd", "SoTozuZ4nWooRBeFz"] 但我仍然无法执行您的代码: db.inventory.find( { qty: { $in: followeeIds } } ).count () 它返回 0
      • 好的,我认为问题可能出在其他地方……因为我无法从服务器端访问用户集合。它由 accounts-ui 包制作,但我不知道如何启用发布集合 hm...
      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 2016-12-14
      • 2016-03-31
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      相关资源
      最近更新 更多