MongoDB动态结果

时间:2011-12-21 13:00:39

标签: mongodb

在SQL中,可以添加不在表模型中的字段,并在查询期间呈现它们。 MongoDB是否能够在模型和/或查询中执行相同的操作?

例如,是否有“方法”将文档存储在示例集合中:

db.example.save(
{
"name":"randomValue",
"random": function(){ return Math.random() };
})

其中find.example.find();会导致“已评估”的文档结果如下:

{"name":"randomValue", "random":0.9879878, "_id" : { "$oid" : "4ef1d1…" }}

(正在评估的函数将被其返回值替换)

如果这仅在查询中指定函数时可行,该怎么做?

3 个答案:

答案 0 :(得分:3)

简短的回答是:不,这是不可能的。

此类功能是“演示文稿”图层的一部分。当您在ui上显示数据时,通常会准备ui模型。在此步骤中,您可以调用任何函数并从客户端语言扩展模型。

或者如果您需要在文档中有一些额外的值(应该由某个函数评估),您可以在保存文档之前调用此函数。例如,保存Math.Random字段中random评估的随机值的shell脚本:

random = Math.random();
db.example.save(
{
  "name":"randomValue",
  "random": random
})

希望这有用。

答案 1 :(得分:2)

目前没有动态评估或混合值到记录集的方法。

正如你所说,你可以存储函数,但你必须通过迭代每个文档并调用doc.random = db.eval('doc.random')来评估它们,这将用一个值替换原始函数 - 这可能不是你想要的

您还可以在db.system.js中存储函数并调用它们以返回修改后的数据集 - 运行db.eval确实有一些缺点,map reduce可能更适合。

退房:http://www.mongodb.org/display/DOCS/Server-side+Code+Execution

答案 2 :(得分:2)