Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
聚合中的Mongodb存储函数_Mongodb_Aggregation Framework_Mongodb Java - Fatal编程技术网

聚合中的Mongodb存储函数

聚合中的Mongodb存储函数,mongodb,aggregation-framework,mongodb-java,Mongodb,Aggregation Framework,Mongodb Java,我正在使用以下查询从mongo db获取数据: db.FetchedUrl.aggregate({ "$match": { "type": db.eval('echoFunction(\"news\")') } }) 这是我存储的函数: db.system.js.save({ _id: "echoFunction", "value": function(x){return x} }) 这段代码在mongo db shell中运行良好。如何编写等价的Java代码来调用聚

我正在使用以下查询从mongo db获取数据:

db.FetchedUrl.aggregate({
  "$match": {
    "type": db.eval('echoFunction(\"news\")')
  }
})
这是我存储的函数:

db.system.js.save({
  _id: "echoFunction",
  "value": function(x){return x}
})

这段代码在mongo db shell中运行良好。如何编写等价的Java代码来调用聚合中的存储函数?

我认为您需要了解这里实际发生了什么。以这个为例,您可以在shell中自己完成。在这里声明一个变量,如下所示:

var param = db.eval('echoFunction(\"news\")');
db.FetchedUrl.aggregate({
  "$match": {
    "type": param
  }
})
然后再这样做一次聚合:

var param = db.eval('echoFunction(\"news\")');
db.FetchedUrl.aggregate({
  "$match": {
    "type": param
  }
})
事情是这样的。您知道您的服务器上没有一个名为“param”的“存储”变量,但结果当然与您之前所做的相同

这是因为,在请求发送到服务器之前,在“shell”中对该值进行求值,就像您所做的一样

因此,在这种情况下,在执行聚合时,“服务器端”函数不提供任何服务器端评估

这意味着,您编写的任何“Java”代码都将在发送到服务器之前被预先评估到BSON文档中

所以,无论您使用什么方法来“获取”这个值,您都需要用“Java”代码来编写它。然后,通过驱动程序提供的方法将该值作为BSON文档中相同键的值放入

MongoDB网站上有一些注释