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

Mit*_*hun 0 javascript mongodb aggregation-framework

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

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

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

//  
db.article.aggregate(
{ $project : {
    title : 1 ,
    author : 1 ,
}});
Run Code Online (Sandbox Code Playgroud)

现在,在上面的代码中,我想动态地将"author"的投影替换为"salary".对于这样的事情

    db.article.aggregate(
{ $project : {
    title : 1 ,
    "my_variable" : 1 ,
}});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,将动态投影薪水.

Ste*_*nie 5

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

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

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

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})
Run Code Online (Sandbox Code Playgroud)

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