Elixir和mongodb聚合

我用一个具有以下结构的集合设置了一个mongodb:

{ "_id" : "some_id","city" : { "name" : "City1" }}

我已经开始使用elixir 1.9.2和phoenix创建一个项目,并设置了{:mongodb,“〜> 0.5.1”}

我已经在phoenix中设置了一些查找查询,这些查询已经在起作用,因此我与phoenix的mongodb的连接正常。

编辑: 这些查询已经对我有用:

def get_trip_list() do


{:ok,conn} = Mongo.start_link(url:"mongodb://localhost:27017/myaguila")

    cursor = Mongo.find(conn,"trip",%{})

    cursor
    |> Enum.to_list()
  end
def get_total_count() do
    {:ok,conn} = Mongo.start_link(url: "mongodb://localhost:27017/myaguila")
    cursor = Mongo.count(conn,%{})
    {:ok,total} = cursor
    {:total_trips,total}
  end

但是现在我需要构建一个带有聚合的查询来计算每个城市出现了多少次,我真的不明白如何使用凤凰城的mongodb管道

我以这种方式直接在mongo的shell中写了一个查询(我尝试并工作了):

db.collection_name.aggregate([{$group: {_id : "$city",count: {$sum: 1}}}])

为我带来那些结果:

  

{“ _id”:{“名称”:“ City1”},“计数”:212}

     

{“ _id”:{“ name”:“ City2”},“ count”:1200

     

{“ _id”:{“名称”:“ City3”},“计数”:789}

     

{“ _id”:{“名称”:“ City4”},“计数”:540}

     

{“ _id”:{“名称”:“ City5”},“计数”:333}

所以我需要将此mongo查询翻译成长生不老药语言。

(对此了解不多,但我知道我不使用Ecto)

那是长生不老药的预期结果。

这是图书馆的文档

https://hexdocs.pm/mongodb/readme.html#contributing

谢谢。

wozhuai3210 回答:Elixir和mongodb聚合

看:)

db.cities.aggregate([
    {
        $group: {
            _id: { name: "$city.name" },count: { $sum: 1 }
        }
    }
])

mongodb查询的结果

{ "_id" : { "name" : "City1" },"count" : 3 }
{ "_id" : { "name" : "City2" },"count" : 2 }
,

这是解决方案:

Mongo.aggregate(pid,"trip",[%{"$group" => %{ "_id" => "$city.name","count" => %{ "$sum" => 1}}}])

我错过了第一张地图之前的方括号。

感谢有兴趣的人。

本文链接:https://www.f2er.com/3018118.html

大家都在问