使用 Javascript 从 MongoDB return 中提取值。

Extracting a value from a MongoDB return, using Javascript.

从 Mongo 数据库查询的 return 中提取整数,在 Javascript.

我计划使用 javascript 中的存储过程为我的 Mongo 数据库设置创建一些服务器端处理的查询。作为概念验证,我正在尝试完成从 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
>

请注意,没有值得到 returned

轻微变体:

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

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

那么,在这个例子中,我怎样才能将一个简单的“38”放入变量中呢?

如果每个 domain 有一条记录,请使用 findOne 方法,

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

之所以有效,是因为此方法 return 是单个文档。而 find return 将 cursor 添加到结果列表。

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

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