【问题标题】:How to use populated data in condition in node.js, mongoose?如何在node.js,mongoose中使用填充数据?
【发布时间】:2018-05-19 15:04:05
【问题描述】:

我正在使用此查询来获取数据。

   let query = User.find({$and:
                    [{isDeleted:{$ne:true}}, 
                    {company_domain:req.headers.domain}]
                    });
    var populateQuery = [{path: 'created_by'}];
    var options = {
        limit: parseInt(req.query.limit),
        page: parseInt(req.query.page),
        populate: populateQuery,
    };

        query.exec(()=>{
        User.paginate(query, options).then(function(result) {
                res.json(result);
            });

我想过滤来自填充属性created_by的数据;例如我喜欢按created_by.name 过滤数据,我该怎么做?

【问题讨论】:

  • 问题已被编辑,因此答案不同。

标签: node.js mongodb express pagination


【解决方案1】:

由于 javascript 执行代码的方式,计数不会出现在结果中。它不会等待您的用户计数被获取然后返回响应,而是在实际获取计数之前执行以下行,那就是为什么响应没有计数。

result.activeCount=a;
result.deactiveCount=b;
res.json(result);

使用以下代码更改您的代码:

 var results = {};
 User.paginate(query, options)
      .then(function(records) {
            results.records = records;
            return User.count({status: 'Active'}).exec();      
        })
      .then(function(activeCount){
           results.activeCount =  activeCount; 
           return User.count({status: 'Deactive'}).exec();
       })
      .then(function(deactiveCount){
           results.deactiveCount = deactiveCount;
           // finally here send the response.
           res.json(results);
       });

在这里,我使用 Promises 来首先获取记录并将其添加到第一个 then 内的 results 对象中,然后我将返回另一个 User.count 的 Promise 对象,它将在下一个链式 @ 中处理987654326@ 方法。在第二个then 方法中,我将activeCount 添加到结果中并返回User.count 的另一个Promise,它将在下一个链接的then 方法中处理。在最后的第三个then 方法中,我将deactiveCount 添加到results 对象中,最后发回响应。

注意:阅读有关 JavaScript 同步和异步以及代码执行的更多信息。

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2015-08-07
    • 2019-03-28
    相关资源
    最近更新 更多