为什么我的聚合($ lookup)函数在mongoose和node.js中不起作用?

时间:2016-12-28 22:28:01

标签: node.js mongodb mongoose mongodb-query aggregation-framework

在我的mongoose数据库中,我有两个模型:UsersComments

在我的node.js代码中,我有:

var Comment = require('./../models/commentsModel.js');
var User = require('./../models/usersModel.js');  

现在,我想构建一个$lookup的查询,以返回Comments的结果和相应的Users(当前Comments包含字段user_id)。这就是我到目前为止所做的:

function executeQuery(query, callback) {
    query = Comment.find(query);

    Comment.aggregate([{$lookup:
    { from: "users",
        localField: "user_id",
        foreignField:"_id",
        as: "user"
    }}]);

    query.exec(function(err, comments){
        if(err) {
            callback(err);
            return;
        }
    return callback(null, comments);
    });
}

但我没有看到User的任何数据附加到Comment的结果中。我错过了什么?

1 个答案:

答案 0 :(得分:0)

您没有执行聚合查询。在最后添加函数回调或调用exec(function(err,res))

Comment.aggregate([{
    $lookup: {
        from: "users",
        localField: "user_id",
        foreignField: "_id",
        as: "user"
    }
}],function(err,res){
    console.log(res);
});

或者

var aggregateQuery = Comment.aggregate([{
    $lookup: {
        from: "users",
        localField: "user_id",
        foreignField: "_id",
        as: "user"
    }
}]);
aggregateQuery.exec(function(err,res){
    console.log(res);
})