我可以根据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步查询操作。
- 获得所有与john的名字的客户的ID。
- 获取映射到这些客户的订单。
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) {...}); });