MongoDB聚合框架:在Project" key"中使用动态javascript变量领域

时间:2014-07-24 21:56:03

标签: javascript mongodb aggregation-framework

几乎是MongoDB聚合框架的新手。我想知道是否有办法使用动态变量在聚合框架中执行项目。

EG。这是我的代码,它不是javascript语法,但如果你明白这一点:

// My javascript variable
var my_variable = "salary";    

//  
db.article.aggregate(
{ $project : {
    title : 1 ,
    author : 1 ,
}});

现在,在上面的代码中,我想动态替换" author"的投影。到"工资"。对于像这样的事情

    db.article.aggregate(
{ $project : {
    title : 1 ,
    "my_variable" : 1 ,
}});

在这种情况下,将动态投影工资。

2 个答案:

答案 0 :(得分:5)

这里的变量并非真正动态,因为它在此期间无法改变 聚合管道。聚合框架不会评估JavaScript,因此您提供的任何值都必须从提供的管道或正在处理的文档中派生。

但是,您当然可以通过编程方式构建管道以实现结果。

例如,使用mongo shell,您可以创建一个变量来表示聚合管道的一些(或全部):

var myProjection = {
    title : 1,
    author: 1,
}

// Replace author with salary
delete myProjection.author
myProjection.salary = 1

// Projection will be: { "title" : 1, "salary" : 1 }
db.article.aggregate({ $project: myProjection})

在这种情况下,myProjection变量由mongo shell在聚合查询发送到MongoDB服务器之前进行评估。

答案 1 :(得分:1)

如果您将字段名称分配给变量,我将创建一个投影对象并将字段名称指定为变量值。您的代码将变为:

    // My javascript variable
    var my_variable = "salary";

    var projection = { title: 1, author: 1 };
    delete projection.author;
    projection[my_variable] = 1;

    db.article.aggregate({$project: projection});