使用Javascript从MongoDB返回中提取值。

使用Javascript从MongoDB返回中提取值。,javascript,mongodb,stored-procedures,javascript-objects,Javascript,Mongodb,Stored Procedures,Javascript Objects,在Javascript中从MongoDB查询的返回中提取整数 我计划使用javascript中的存储过程为我的MongoDB设置创建一些服务器端已处理查询。作为概念证明,我正在尝试从Mongo shell中现有的测试数据库中提取值,使它们可以在javascript中进行处理 我的数据库由包含域名的条目和它所看到的点击数组成: {"dom":"domain1.org", "hits": 38} {"dom":"domain2.com", "hits": 12} 为了证明概念,我想编写一个函数“a

在Javascript中从MongoDB查询的返回中提取整数

我计划使用javascript中的存储过程为我的MongoDB设置创建一些服务器端已处理查询。作为概念证明,我正在尝试从Mongo shell中现有的测试数据库中提取值,使它们可以在javascript中进行处理

我的数据库由包含域名的条目和它所看到的点击数组成:

{"dom":"domain1.org", "hits": 38}
{"dom":"domain2.com", "hits": 12}
为了证明概念,我想编写一个函数“addDomainHits”,它将执行以下操作:

db.eval('addDomainHits("domain1.org","domain2.com")');
50
[注1:我非常清楚我可以使用MongoDB聚合来执行此特定功能,但这不是答案;这只是概念证明;我实际上想在我实际编写的函数中做更多的工作。]

[注2:是的,这是非常不安全的,并且容易被代码注入。我稍后会处理这个问题。同样,这只是概念的证明。]

因此,我试图将整数值放入MongoDB Shell中的变量中,这就是我遇到问题的地方

$ mongo
MongoDB shell version: 2.6.11
connecting to: test

> use test_database
switched to db test_database

> var r=db.test_collection.find({"dom":"domain1.org"},{hits:true,_id:false})
> r
{ "hits" : 38 }
现在,我想把'38'转换成简单的整数变量,这样我就可以进行类似以下的处理:

> a=2
2
> b=3
3
> a+b
5
但是,没有快乐:

> r=db.test_collection.find({"dom":"domain1.org"},{hits:true,_id:false})
> r
{ "hits" : 38 }

> var r=db.test_collection.find({"dom":"domain1.org"},{hits:true,_id:false})
> r.hits
>
请注意,没有返回任何值

轻微变异:

> var r=db.test_collection.find({"dom":"domain1.org"},{hits:true,_id:false})
> var h=r.hits
> h
>


因此,在本例中,如何将一个简单的“38”放入变量中?

如果每个
域有一条记录,请使用以下方法

这是因为此方法返回单个文档。而将
光标
返回到结果列表

注意:如果没有匹配的记录,
findOne
方法将返回
null
。在这种情况下,以下内容更有意义:

var record = db.test_collection.findOne({dom:"seagoedd.org"},
                                   {hits:true,_id:false})
var hits = record?record["hits"]:0;

如果每个
域有一条记录,请使用以下方法:

这是因为此方法返回单个文档。而将
光标
返回到结果列表

注意:如果没有匹配的记录,
findOne
方法将返回
null
。在这种情况下,以下内容更有意义:

var record = db.test_collection.findOne({dom:"seagoedd.org"},
                                   {hits:true,_id:false})
var hits = record?record["hits"]:0;

尝试在末尾添加.toObject(),比如var r=db.test_collection.find({dom:“seagoedd.org”},{hits:true,{u id:false})。在服务器上运行JavaScript代码(虽然受支持)的tobject()从来都不是一个好主意。这不是“存储过程”,也不是MongoDB以任何方式支持的概念。通常,使用聚合框架或mapReduce(视情况而定)可以更好地执行操作。忘记“证明概念”,因为如果你没有从正确的地方开始,你就走错了路。至于基本问题。所有(大多数)MongoDB操作本质上都返回一个BSON对象(翻译成所用语言的相关结构)。只有
.distinct()
尝试返回任何其他内容(值数组)。以您希望的方式从返回的对象中提取值是代码的工作,而不是数据库的工作来执行此类转换。请尝试在末尾添加.toObject(),如var r=db.test_collection.find({dom:“seagoedd.org”},{hits:true,_id:false})。toObject()在服务器上运行JavaScript代码(尽管受支持)这从来都不是个好主意。这不是“存储过程”,也不是MongoDB以任何方式支持的概念。通常,使用聚合框架或mapReduce(视情况而定)可以更好地执行操作。忘记“证明概念”,因为如果你没有从正确的地方开始,你就走错了路。至于基本问题。所有(大多数)MongoDB操作本质上都返回一个BSON对象(翻译成所用语言的相关结构)。只有
.distinct()
尝试返回任何其他内容(值数组)。代码的任务是以希望使用的方式从返回的对象中提取值,而不是数据库的任务来执行此类转换。
var record = db.test_collection.findOne({dom:"seagoedd.org"},
                                   {hits:true,_id:false})
var hits = record?record["hits"]:0;