Глубокие запросы с драйвером mongodb в фениксе / эликсире - PullRequest
0 голосов
/ 05 февраля 2020

Я использую драйвер mongodb из https://github.com/ankhers/mongodb для запроса базы данных mongodb в проекте эликсира / феникса. Простой запрос, такой как

cursor = Mongo.find(:mongo, "posts",%{})
      list = Enum.to_list(cursor)
      object= Enum.fetch(list,0)
      object= elem(object, 1) 
      new_list=Map.fetch(object, "name")
      new_list=elem(new_list,1)
      new_cursor= Mongo.find(:mongo, "posts",%{"name" => new_list})
      new_list=Enum.to_list(new_cursor)

, не является проблемой, но мне интересно, как выполнить более глубокий поиск, поскольку у меня есть вложенные jsons, такие как

{"posts":{"name":"something","attributes":{"aspect":{"and_so_on":"endpoint"}}}}. 

Так как добраться до "конечной точки " в этом случае ?

1 Ответ

0 голосов
/ 05 февраля 2020

Ваш код крайне не идиомати c, во-первых. Не следует переназначать значения на каждом шаге, вместо этого мы обычно используем каналы Kernel.|>/2.

При этом ваш исходный курсор может быть записан как

list =
  :mongo
  |> Mongo.find("posts", %{})
  |> Enum.fetch(0)
  |> elem(1) 
  |> Map.fetch("name")
  |> elem(1)
new_list =
  :mongo
  |> Mongo.find("posts", %{"name" => list})
  |> Enum.to_list()

или лучше с сопоставлением с шаблоном

%{"name" => one} =
  Mongo.find_one(:mongo, "posts", %{})
one
#⇒ "something"

MongoDB также поддерживает mon go язык запросов в Mongo.find/4, как показано в примерах здесь . Чтобы добраться до вложенного элемента, можно сделать:

Mongo.find(:mongo, "posts",
  %{"attributes" => %{"aspect" => "and_so_on"}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...