loopbackjs / mongodb在批量upsert操作上返回重复键错误

时间:2015-10-09 16:07:51

标签: angularjs mongodb rest loopbackjs

我试图通过将PUT动词用于基于环回的Rest API来一次性多个文档。 消息正文包含一个json对象数组。

[
   {"_id" : "1",
     "data" : "foo"
    },
     {"_id" : "2",
     "data" : "bar"
    }
]

在空数据库上,这很好用(创建)。所有文档都按预期创建。 但是,如果我再次运行相同的调用(更新),我收到一个包含类似错误消息数组的错误:

E11000重复键错误索引:testdatabase.node。$ id dup key:{:“1”}

经过一些进一步的调查,我发现如果我传递一个对象,upsert工作正常。

{"_id" : "1",
     "data" : "foo"
}

但是:如果我使用相同的单个对象传递一个数组,则会返回错误。

[
    {"_id" : "1",
     "data" : "foo"
    }
]

单个upserts不是一个选项,因为我必须使用Rest Api更新数千个文档。

环回版本:2.22

1 个答案:

答案 0 :(得分:0)

upsert函数将单个模型作为参数。 看看documentation

为了根据需要更新不同的模型,您必须使用本机驱动程序。

修改

我挖掘了环回源代码,发现PUT请求使用了连接器的upsert函数。 这意味着它需要一个模型而不是一个数组,也许loopback并没有强制执行它。 您可以找到相关代码here

无论如何,最接近多个模型的是mongodb的批量操作,但这会导致自我实现。