簡體   English   中英

存儲過程中的Mongodb處理-JavaScript中的BSON到JSON

[英]Mongodb processing in stored procedures - BSON to JSON in javascript

我有一個mongodb數據庫,其中包含域的記錄,並且每個數據庫都包含“ hits”的整數。

record =
{
"dom" : "Somedomain.com",
"hits" : 23
}

我想編寫一些mongodb存儲過程來處理服務器上的這些記錄。 MongoDb可以在javascript中存儲過程。

我想(舉一個簡單的例子)獲得兩個域的點擊總數。 在Python / pymongo中,我可以輕松做到這一點-我可以獲取兩個域的db.find({“ dom”:“ domainname.com”})記錄,將返回的記錄解析為JSON,提取匹配數,然后添加它們。

但是,我似乎無法在javascript中執行相同的操作。 問題的一部分似乎是find返回BSON,而不是JSON,並且似乎沒有本機轉換方式。

> This is in the Mongo Shell, which is mostly javascript.

> var r = db.test_collection.find({dom:"somedomain.com"},{hits:true,_id:false})
> r
{ "hits" : 1043 }
> var j = JSON.parse(r)
2016-03-03T17:27:52.046-0500 SyntaxError: Unexpected token D

> var r = db.test_collection.find({dom:"somedomain.com"},{hits:true,_id:false}).valueOf() 
> r
{ "hits" : 1043 }
> var j = JSON.parse(r)
2016-03-03T17:27:52.046-0500 SyntaxError: Unexpected token D

此“ SyntaxError”的來源似乎是BSON與JSON

> var r = db.test_collection.find({dom:"somedomain.com"},{hits:true,_id:false}).valueOf()
> r.hits
>

我無法在可以使用的地方獲得“點擊”值。

我可以使用Pymongo在Python中輕松完成此操作,但不能在mongo shell中或在javascript中完成。

我希望存儲的javascript過程能夠從db中檢索值,並對其進行處理,最后返回結果。 但是我無法獲得實際值(在這種情況下,點擊數)。 任何人?

我認為MongoDB聚合可能是您想要的。

您將執行以下操作:

db.test_collection.aggregate( [
   { $group: { _id: "$dom", total: { $sum: "$hits" } } },
   { $match: { dom: { $or: ['somedomain.com', 'anotherdomain.com'] } } }
] )

上面只是一個簡單的示例,我不知道所有數據的確切結構,因此您可能需要稍作調整。 MongoDB文檔提供了一個與郵政編碼和城市人口有關的匯總示例

db.zipcodes.aggregate( [
   { $group: { _id: { state: "$state", city: "$city" }, pop: { $sum: "$pop" } } },
   { $group: { _id: "$_id.state", avgCityPop: { $avg: "$pop" } } }
] )

另外,請記住,您不必執行var j = JSON.parse(r) MongoDB查詢返回普通的舊JavaScript對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM