我可以根据mongoDB中的填充条件来查找文档吗?

我想find那些客户名字叫“john”的订单。 只想用mongo查询。

我有一个订单集合,如:

{ "_id" : ObjectId("5669891a49b065ae2d7a5ea7"), "customer" : ObjectId("563a399a11c9b15001565463"), "quantity" : "6" } 

我的查询:

 var page = req.query.page || 1; var limit = req.query.limit || 20; var skip = (page - 1) * limit; var populateSearchQuery = { firstName: { '$regex': 'john', '$options': 'i' } } Order.find({}) .skip(skip).limit(limit) .populate('customer','firstName lastName', populateSearchQuery) .exec(function(error, orders) { if(error) { return res.status(400).send({msg: 'Error occurred while getting orders.'}); } return res.status(200).send(orders); }); 

我得到所有的订单,但只填充匹配的条件客户。 只需要匹配的条件命令。

有什么方法可以只使用mongo查询吗?

我不相信这是可能的。 你可以通过一个聚合操作来达到目的 ,但是你仍然可以获得所有的文档,然后对它们进行sorting。 你最好的select可能只是一个2步查询操作。

  1. 获得所有与john的名字的客户的ID。
  2. 获取映射到这些客户的订单。
 Customer.find({firstName: 'john'}) .select('_id') .exec(function(err, customerDocs) { if (err) {...} var customerIds = []; for (var i=0; i<customerDocs.length; i++) { customerIds.push(customerDocs[i]._id); } Order.find({customer: {$in: customerIds}}) .exec(function(err, orderDocs) {...}); });