2011-12-21 72 views
2

在SQL中,可以添加不在表模型中的字段并在查询过程中呈现它们。 MongoDB能够在模型和/或查询中执行相同的操作吗?MongoDB动态结果

举例来说,有没有“办法”以存储例如收集的文件:

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

find.example.find();会导致类似的“评估”文件的结果:

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

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

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

+0

你需要一个随机值*每个*一次调用find()方法,或者这只是一个例子来说明你的问题? – milan 2011-12-21 14:10:13

+0

这是一个例子,很容易在保存时设置一个值。 – 2011-12-22 08:02:44

回答

2

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

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

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

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

3

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

这样的功能是'演示'层的一部分。当你在UI上显示数据时,你通常会准备UI模型。在此步骤中,您可以调用任何函数并从客户端语言扩展您的模型。

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

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

希望这会有所帮助。