gpt4 book ai didi

javascript - 如果文档不存在,如何使用 LoopBack 从 MongoDb 中的远程方法中插入文档

转载 作者:行者123 更新时间:2023-11-30 19:29:55 24 4
gpt4 key购买 nike

我是 MongoDB 的新手(大约 4 天),我正在尝试使用 Loopback 从远程方法中将文档插入到我的集合中,而不添加重复的文档。

我首先测试了这样添加文档:

Events.create(resultData);

这没有问题。

然后我继续尝试添加文档而不添加重复项 a few other answers :

Events.update(data,data,{upsert: true});

但是,这并没有向数据库添加任何内容。

我决定继续尝试,看看是否可以先检查是否可以从集合中找到文档,因此不添加该文档。类似于 this answer .

if(Events.find({itemOfData: resultData.itemOfData},{limit: 1}).size < 1){
Events.create(resultData);
}

但是,和以前一样,它不会创建任何文档。

我不确定接下来要尝试什么,或者我对上述解决方案的实现是否有问题。

最佳答案

Events.update(data,data,{upsert: true});

LoopBack 模型不公开 MongoDB API。类似 create 的方法正在提供由连接器映射到数据库命令的与数据库无关的 API。

如果只想插入不存在的文档,可以使用以下方法之一(取决于您要实现的目标):

  • replaceOrCreate
  • patchOrCreate (也称为 upsertupdateOrCreate )
  • findOrCreate
  • upsertWithWhere

if(Events.find({itemOfData: resultData.itemOfData},{limit: 1}).size < 1){

find方法接受一个 Filter 对象(参见 Querying data ),它不仅包含匹配记录的条件,还包含分页和要包含的相关模型等内容。条件存储在 where 中Filter 对象的属性。

还有 find方法返回一个Promise,需要等到resolved再统计返回的记录数。

const found = Events.find({
where: {itemOfData: resultData.itemOfData}
limit: 1
});
if (found.size < 1){
// ...
}

虽然解决方案基于find在开发中似乎效果很好,它引入了竞争条件,当应用程序处于高负载时,可以创建两个“相同”的记录。只要有可能,建议使用内置函数,如 patchOrCreate使用特定于数据库的方法来保证原子性。

关于javascript - 如果文档不存在,如何使用 LoopBack 从 MongoDb 中的远程方法中插入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56527486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com