NodeJS MongoDB在聚合管道中传递参数

时间:2016-09-13 09:08:24

标签: node.js mongodb express aggregation-framework mean-stack

如何将参数传递给聚合? 我使用$match运算符获取params并尝试传递它但查询返回空数组:

app.get('/api/:name', function(req, res){
        var name = req.params.name;
        console.log(name);

        db.collection('coll').aggregate([{$match: {name: '$name'}}, {$unwind: { path: "$dates", includeArrayIndex: "idx" } }, { $project: { _id: 0, dates: 1, numbers: { $arrayElemAt: ["$numbers", "$idx"] }, goals: { $arrayElemAt: ["$goals", "$idx"] }, durations: { $arrayElemAt: ["$durations", "$idx"]}}}]).toArray(function(err, docs) {
            if (err) {
                assert.equal(null);
            }
            else {
                console.log(docs);
                res.json(docs);
            } 
        });
    })

我应该关心管道中运营商的订单吗?

4 个答案:

答案 0 :(得分:1)

似乎你从不使用名为变量的变量。

试试这个,将{$match: {name: '$name'}更改为{$match: {name: name}

答案 1 :(得分:1)

请尝试以下代码: -

2016-09-13 11:33:18,404 [1956] The sky is so blue

答案 2 :(得分:1)

尝试, {$ match:{'name':req.params.name}} 这对我有用

答案 3 :(得分:0)

猫鼬不会强制转换阶段。除非_id是数据库中的字符串,否则以下内容将不起作用

new Aggregate([{ $match: { _id: '00000000000000000000000a' } }]);
// Do this instead to cast to an ObjectId
new Aggregate([{ $match: { _id: 
mongoose.Types.ObjectId('00000000000000000000000a') } }]);

API URL:https://mongoosejs.com/docs/api.html#aggregate_Aggregate