如何使用node.js中的数据从两个表中search数据?

我有下面的架构用户报告请求表,并使用人口获取和显示报告用户列表。

var user = new Schema({ name : {type:String,required:[true,"name is required"]}, }); var report_request = new Schema({ user_id : {type:Schema.Types.ObjectId, ref: 'user' }, reported_by_id : {type:Schema.Types.ObjectId, ref: 'user' }, reason : String, }); 

但问题是我有在列表中的searchfilter,并可以通过名称search报告的用户。 所以我想要做这样的事情:report_request.find({'user.name':/ Ruby / i});

 id Name Reported By 1 Ruby Mark 2 Johny Ruby 

我试图做到这一点,但它不工作。 那么他们有什么其他的方式来做到这一点?

提前致谢!!

使用人口,您可以对填充的文档发出“子查询”:

 report_request.find() .populate({ path : 'user_id', match : { name : /Ruby/i } }) .exec(...) 

不过,据我所知,这将首先检索数据库中的所有 repost_request文档,然后对user运行查询以查找匹配/Ruby/i文档。

所以在性能方面,这不是一个好的解决scheme。 但是,对于架构,我认为这是唯一可以用一步完成的解决scheme。

相反,您首先需要find与名称匹配的用户,并使用他们的ID来查找属于他们的报告:

 user.find({ name : /Ruby/i }).exec(function(err, users) { var ids = users.map(function(user) { return user.id }); request_report.find({ user_id : { $in : ids } }).exec(function(err, requests) { ... }); }); 

(我不记得{ user_id : { $in : users } }在Mongoose中是否也能工作;如果是这样,它会为你节省更多的users.map()