MongoDB动态结果

MongoDB动态结果,mongodb,Mongodb,在SQL中,可以添加不在表模型中的字段,并在查询期间呈现这些字段。MongoDB是否能够在模型和/或查询中执行相同的操作 例如,在示例集合中是否有存储文档的“方法”: db.example.save( { "name":"randomValue", "random": function(){ return Math.random() }; }) 其中find.example.find()将导致“评估”文档结果,如: {"name":"randomValue", "random":0.98798

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

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

db.example.save(
{
"name":"randomValue",
"random": function(){ return Math.random() };
})
其中
find.example.find()将导致“评估”文档结果,如:

{"name":"randomValue", "random":0.9879878, "_id" : { "$oid" : "4ef1d1…" }}
(正在求值的函数将被其返回值替换)


如果这仅在指定查询中的函数时可行,那么如何操作?

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

这种功能是“表示”层的一部分。在ui上显示数据时,通常准备ui模型。在此步骤中,您可以调用任何函数,并从客户机语言扩展您的模型

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

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

希望这会有所帮助。

目前没有动态计算或将值混合到记录集中的方法

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

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


查看:

查看MongoDB。动态:


每次调用find()时都需要一个随机值,或者这只是一个示例来说明您的问题?这是一个示例,在save上设置值非常容易。很高兴看到事情在不断发展。附言:我建议在网站上放一些使用示例。