在SQL中,可以添加不在表模型中的字段,并在查询期间呈现它们。 MongoDB是否能够在模型和/或查询中执行相同的操作?
例如,是否有“方法”将文档存储在示例集合中:
db.example.save(
{
"name":"randomValue",
"random": function(){ return Math.random() };
})
其中find.example.find();
会导致“已评估”的文档结果如下:
{"name":"randomValue", "random":0.9879878, "_id" : { "$oid" : "4ef1d1…" }}
(正在评估的函数将被其返回值替换)
如果这仅在查询中指定函数时可行,该怎么做?
答案 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)
看看MongoDB.Dynamic: