我有一个 mongodb Relationships集合,用于存储user_id和followee_id(用户关注的人)。如果我查询user_id,我可以找到用户所关注的所有个人。接下来,我需要针对所有返回的followee id查询Users集合以获取其个人信息。这是我困惑的地方。我怎么做到这一点?
注意:我知道我可以将跟随者嵌入到单个用户的文档中并使用$ in运算符,但我不想走这条路。我想保持最大的灵活性。
答案 0 :(得分:0)
如果我的问题是对的(我想是的)。
您需要查询用户关注的每个"个人"。 这意味着查询数据库关于每个查询的多个查询并获取数据。 因为node.js中的查询(我假设您使用的是mongoose)是异步的,您需要使代码更多地与此任务异步。 如果你不熟悉node.js中的异步模块,那么它就知道了。 请参阅npm async for docs。 我为您提供了查询的示例代码以及它的实现方式。
/*array of followee_id from the last query*/
function query(followee_id_arr, callback) {
var async = require('async')
var allResults = [];
async.eachSerias(followee_id_arr, function (f_id, callback){
db.userCollection.findOne({_id : f_id},{_id : 1, personalData : 1},function(err, data){
if(err) {/*handel error*/}
else {
allResults.push(data);
callback()
}
}, function(){
callback(null, allResults);
})
})
}

您甚至可以使用 async.map
并行制作所有查询(以获得更好的性能)答案 1 :(得分:0)
您可以使用$ in查询而不对用户的跟随者进行非规范化。您只需要进行一些数据操作:
Relationship.find({user_id: user_id}, function(error, relationships) {
var followee_ids = relationships.map(function(relationship) {
return relationship.followee_id;
});
User.find({_id: { $in: followee_ids}}, function(error, users) {
// voila
});
};