几乎是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 ,
}});
在这种情况下,将动态投影工资。
答案 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});