javascript - 我可以在 mongoDB 中根据填充条件查找文档吗?

标签 javascript angularjs node.js mongodb

我想找到那些客户名字如“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查询吗?

最佳答案

我不认为这是可能的。你可以用 Aggregation Operation 到达那里,但您仍然会获取所有文档,然后对它们进行分类。您最好的选择可能只是一个两步查询操作。

  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) {...});
    });

关于javascript - 我可以在 mongoDB 中根据填充条件查找文档吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34287275/

相关文章:

javascript - Bootstrap 下拉菜单在左侧打开

javascript - jquery 关闭不工作

javascript - Onsen UI 在 ng-click 上显示日期选择器

javascript - 如何在hbs中渲染JS函数?

javascript - 通过选择器获取动态元素

javascript - 在 HTML 中加载多行文本(每 60 秒逐行)的最佳方法是什么?

javascript - Firefox 附加组件中使用 XMLHttpRequest 拒绝 Referer、Connection 和 Accept-Encoding

javascript - 基于日期的 Angular ui-grid 过滤为空或不为空

javascript - AngularJS 在 ng-repeat 之后添加 jQuery dom 事件监听器

node.js - 使用反向代理 Nginx 服务 React 创建应用程序和 Nodejs 应用程序