我不认为这是一个特定于Meteor的问题,而是围绕mongo和构建mongo查询。
如果我有以下结构,
{
username : someName,
contacts : [
{
userid : asdfae33rtqqxxx,
name : contactName,
status : friend
}
{
userid : asdfae33rtqqxxx,
name : anotherName,
status : pending
}
{
userid : asdfae33rtqqxxx,
name : contactName,
status : blocked
}
]
}
如何将此数组中的值传递到针对users集合的查询中,a)获取此数组中的用户,或b)从具有特定状态的users集合中获取此数组中的所有用户。
如果无法做到这一点,我应该如何调整架构以使这些查询成为可能?
答案 0 :(得分:1)
此函数将根据联系人数组和可选的必需状态返回Meteor.users
光标:
var usersByContacts = function(contacts, requiredStatus) {
var userIds = _.chain(contacts)
.map(function(c) {
if (requiredStatus) {
if (c.status === requiredStatus)
return c.userid;
} else {
return c.userid;
}
})
.compact()
.value();
return Meteor.users.find({_id: {$in: userIds}});
};
你可以像这样使用它:
var users1 = usersByContacts(thing.contacts);
var users2 = usersByContacts(thing.contacts, 'pending');
这假定thing
具有您问题中引用的架构。另请注意,如果您发现这是代码中的常见模式,则应考虑将usersByContacts
转换为transform。