Mongodb MeteorJs查找具有用户ID数组的所有用户
如何获取在用户ID数组中具有ID的每个用户。 我的问题是我有一个组集合,每个组都有一个名为users的UserID数组,这些用户属于这个组,我需要知道如何从UserID数组中获取用户对象,最好的方法是什么 客户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')
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之外,这正是我上面所说的。你能用你的代码更新你的问题吗?另外,如果您在客户端上运行此代码,您确定已经发布了您希望找到的所有用户吗?