Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb MeteorJs查找具有用户ID数组的所有用户_Mongodb_Meteor_Mongoose - Fatal编程技术网

Mongodb MeteorJs查找具有用户ID数组的所有用户

Mongodb MeteorJs查找具有用户ID数组的所有用户,mongodb,meteor,mongoose,Mongodb,Meteor,Mongoose,如何获取在用户ID数组中具有ID的每个用户。 我的问题是我有一个组集合,每个组都有一个名为users的UserID数组,这些用户属于这个组,我需要知道如何从UserID数组中获取用户对象,最好的方法是什么 客户 export default createContainer((props) => { let user = Meteor.users.findOne(Meteor.userId()) let groupsSub = Meteor.subscribe('groups')

如何获取在用户ID数组中具有ID的每个用户。 我的问题是我有一个组集合,每个组都有一个名为users的UserID数组,这些用户属于这个组,我需要知道如何从UserID数组中获取用户对象,最好的方法是什么

客户

export default createContainer((props) => {
  let user = Meteor.users.findOne(Meteor.userId())
  let groupsSub = Meteor.subscribe('groups')

  if (user) {
    let code = user.profile.selectedGroup
    let group = Groups.findOne({code})
    return {
      ready: groupsSub.ready(),
      group,
      users: Meteor.users.find({_id: {$in: group.users}}).fetch()
    }
  }

  return {}
}, HomePage)
切断

这就是我试图吸引用户的地方

   render () {
    if (this.props.ready) {
    let group = this.props.group
    let users = this.props.users
    console.log(users)

    return (
      <div className='c-fit-group'>
        <div className='c-fit-group__header'>
          <h1>{group.name}</h1>
        </div>
      </div>
     )
   }

   return <div>Loading...</div>
  }
}
render(){
如果(这个道具准备好了){
让组=this.props.group
让用户=this.props.users
console.log(用户)
返回(
{group.name}
)
}
返回加载。。。
}
}
我还使用React作为前端

当我输入console.log group.users时,我得到了这个

当我访问console.log用户时,我得到了这个

若您只是有一个用户ID数组(我很难判断这是否是您试图解决的问题),您可以使用$in操作符。e、 g

let userIds = ['abc', 'def', 'hgi'];
let userCursor = Meteor.users.find({_id: {$in: userIds}});
要仅获取结果而不是光标,请执行以下操作:

let userResults = Meteor.users.find({_id: {$in: userIds}}).fetch();
更新:

从你关于没有获得客户端上所有用户的评论来看,你是否真的在某个地方发布了用户?我想那是你错过的部分

您可以从发布返回多个游标,例如

Meteor.publish('groups', function () {
    let groupsCursor = Groups.find({
        users: {
            $elemMatch: { $eq: this.userId }
        }
    });

    // find these from... ???
    let userIds = [];

    let usersCursor = Meteor.users.find({_id: {$in: userIds}});

    return [groupsCursor, usersCursor];
});

若您只是有一个用户ID数组(我很难判断这是否是您试图解决的问题),那个么您可以使用$in操作符。e、 g

let userIds = ['abc', 'def', 'hgi'];
let userCursor = Meteor.users.find({_id: {$in: userIds}});
要仅获取结果而不是光标,请执行以下操作:

let userResults = Meteor.users.find({_id: {$in: userIds}}).fetch();
更新:

从你关于没有获得客户端上所有用户的评论来看,你是否真的在某个地方发布了用户?我想那是你错过的部分

您可以从发布返回多个游标,例如

Meteor.publish('groups', function () {
    let groupsCursor = Groups.find({
        users: {
            $elemMatch: { $eq: this.userId }
        }
    });

    // find these from... ???
    let userIds = [];

    let usersCursor = Meteor.users.find({_id: {$in: userIds}});

    return [groupsCursor, usersCursor];
});

如果要查找整个集合中的所有用户,可以在聚合下面尝试

db.collection.aggregate([{
    $project: {
        userIds: {
            $setIntersection: ["$userIds", [1, 2, 3]]
        }
    }
}, {
    $unwinds: "$userIds"
}, {
    $group: {
        $id: null,
        userIds: {
            $addToSet: "$userIds"
        }
    }
}])
初始阶段在每个文档中查找所有匹配的
用户ID
,然后查找
$group
,以获取整个集合中不同的用户

db.collection.aggregate([{
    $project: {
        userIds: {
            $setIntersection: ["$userIds", [1, 2, 3]]
        }
    }
}, {
    $unwinds: "$userIds"
}, {
    $group: {
        $id: null,
        userIds: {
            $addToSet: "$userIds"
        }
    }
}])

如果要查找整个集合中的所有用户,可以在聚合下面尝试

db.collection.aggregate([{
    $project: {
        userIds: {
            $setIntersection: ["$userIds", [1, 2, 3]]
        }
    }
}, {
    $unwinds: "$userIds"
}, {
    $group: {
        $id: null,
        userIds: {
            $addToSet: "$userIds"
        }
    }
}])
初始阶段在每个文档中查找所有匹配的
用户ID
,然后查找
$group
,以获取整个集合中不同的用户

db.collection.aggregate([{
    $project: {
        userIds: {
            $setIntersection: ["$userIds", [1, 2, 3]]
        }
    }
}, {
    $unwinds: "$userIds"
}, {
    $group: {
        $id: null,
        userIds: {
            $addToSet: "$userIds"
        }
    }
}])

当我这样做的时候,我得到了一个对象localCollection.Cursor我不知道那是什么:P我希望它能给我一个用户对象数组吗?@GavynCaldwell,no,find()返回一个游标,如果你愿意,你可以在上面迭代。如果只需要结果,还可以调用fetch。我将用一个例子更新答案。好的,我刚刚尝试使用.fetch(),它只返回一个用户。arrayI上至少有2个用户是mongo和meteor的新用户,因此感谢您的帮助@加文考德威尔,我不知道为什么。我只是在浏览器中仔细检查了我的代码,结果正如预期的那样——除了使用真实的用户ID之外,这正是我上面所说的。你能用你的代码更新你的问题吗?另外,如果您在客户端上运行此代码,是否确定已发布所有希望查找的用户?当我执行此操作时,会返回一个对象localCollection。Cursor我不知道那是什么:P我是否希望它为我提供一个用户对象数组?@GavynCaldwell,no,find()返回一个光标,如果需要,可以在其上进行迭代。如果只需要结果,还可以调用fetch。我将用一个例子更新答案。好的,我刚刚尝试使用.fetch(),它只返回一个用户。arrayI上至少有2个用户是mongo和meteor的新用户,因此感谢您的帮助@加文考德威尔,我不知道为什么。我只是在浏览器中仔细检查了我的代码,结果正如预期的那样——除了使用真实的用户ID之外,这正是我上面所说的。你能用你的代码更新你的问题吗?另外,如果您在客户端上运行此代码,您确定已经发布了您希望找到的所有用户吗?