小编Geo*_*vva的帖子

Mongodb 测试中条件推送到数组

我有一个带有“messages”数组字段的文档集合:

{
   "id": 2,
   "messages": [
      {
         "id": 1,
         "text": "foo"
      },
      {
         "id": 2,
         "text": "bar"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

我想更新文档:仅当“消息”不包含具有此类 id 的文档时,才将新的“消息”文档添加到“消息”字段。例如:

{
  "id": 2,
  "text": "bllllllll"
}
Run Code Online (Sandbox Code Playgroud)

不应该添加

{
  "id": 3,
  "text": "foo"
}
Run Code Online (Sandbox Code Playgroud)

应该添加

我怎样才能进行条件附加?我知道我可以通过 $elemMatch 运算符过滤 Find 部分中的文档,但它仅适用于 Update,而使用 Upsert 则不再适用。

mongodb

4
推荐指数
1
解决办法
4810
查看次数

Elixir:救援/捕获任务超时

我有以下代码:

try do
  IO.inspect("start task")
  t = Task.async(fn -> Process.sleep(7000)  end)
  IO.inspect("start awaiting")
  Task.await(t)
rescue
  e ->
    IO.inspect("catch error")
    IO.inspect(e)
after
  IO.inspect("after")
end
IO.inspect("success ending")
Run Code Online (Sandbox Code Playgroud)

这将打印:

"start task"
"start awaiting"
"after"

00:00:03.510 [info]  Application my_app exited: exited in: MyApp.Application.start(:normal, [])
** (EXIT) exited in: Task.await(%Task{owner: #PID<0.497.0>, pid: #PID<0.498.0>, ref: #Reference<0.3923892342.570949633.190577>}, 5000)
    ** (EXIT) time out
Run Code Online (Sandbox Code Playgroud)

所以等待崩溃我的调用者进程,我无法通过某种方式使用"after"块来解决错误.我不明白如何保护我的调用者进程免于任务超时错误.

elixir

1
推荐指数
1
解决办法
773
查看次数

标签 统计

elixir ×1

mongodb ×1