Node Js MongoDB Query对返回的数组

时间:2015-10-25 18:55:43

标签: node.js mongodb

我有一个 mongodb Relationships集合,用于存储user_id和followee_id(用户关注的人)。如果我查询user_id,我可以找到用户所关注的所有个人。接下来,我需要针对所有返回的followee id查询Users集合以获取其个人信息。这是我困惑的地方。我怎么做到这一点?

注意:我知道我可以将跟随者嵌入到单个用户的文档中并使用$ in运算符,但我不想走这条路。我想保持最大的灵活性。

2 个答案:

答案 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
    });
};