Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js insertMany()中的重复文档 insertMany()中的重复文档_Node.js_Json_Mongodb - Fatal编程技术网

Node.js insertMany()中的重复文档 insertMany()中的重复文档

Node.js insertMany()中的重复文档 insertMany()中的重复文档,node.js,json,mongodb,Node.js,Json,Mongodb,你好。我对insertMany()函数有很大的问题。 我的目标是: 观察名为“List.json”的文件 如果其中有更改,则读取该文件 然后将文件List.json中的文档写入数据库mongoDb List.json文件由用户上传到页面上 问题是,我的函数正在工作,但它会在2到3次之后为我编写文档。我不知道是什么引起的。 我希望List.json文件中的一个文档只添加一次。 如果可能,我希望程序检查数据库中是否已经存在带有给定“Nazwisko”的文档。如果存在,则不要将其添加到数据库中 我

你好。我对insertMany()函数有很大的问题。 我的目标是:

  • 观察名为“List.json”的文件
  • 如果其中有更改,则读取该文件
  • 然后将文件List.json中的文档写入数据库mongoDb List.json文件由用户上传到页面上
问题是,我的函数正在工作,但它会在2到3次之后为我编写文档。我不知道是什么引起的。 我希望List.json文件中的一个文档只添加一次。 如果可能,我希望程序检查数据库中是否已经存在带有给定“Nazwisko”的文档。如果存在,则不要将其添加到数据库中

我不使用Moongose。 我只使用mongoDb和node.js 我对蒙戈知之甚少

这是我的职责

fs.watch(文件(“Lista.json”),函数(事件类型,文件名){
fs.readFile(文件名)、函数(错误、数据){
const bazaJson=data;//fs.readFileSync(文件(“Lista.json”).toString();
const bazaJson1=bazaJson.toString();
const bazaJsonObject=JSON.parse(bazaJson1);
客户端连接((错误)=>{
如果(错误){
console.log(“błd polaczenia/manySaveDatabase”);
client.close();
}否则{
const db=client.db(“test”);//pobieram-nazwe-bazy-danych测试
const candidate=db.collection(“candidate”);//nazwa naszej kolekcji
console.log(“polaczenie udane z bazą/manySaveDatabase”);
试一试{
候选。insertMany(bazaJsonObject{
命令:错误,
});
}捕获(e){
控制台日志(“wystąpil blad e:”,e);
}
}
});
});
});
这是我的List.json文件内容

[
{
“Imie”:“Katarzyna”,
“纳兹维斯科”:“蒙戈”,
“Miejscowosc”:“Kraków(Kraków-Śródmieście)”,
“Angielski”:“Angielski C2”
},
{
“Imie”:“Marieta”,
“纳兹维斯科”:“蒙戈łacc”,
“Miejscowosc”:“Rybnik”,
“Angielski”:“Angielski C1”,
},
{
“Imie”:“Marieta”,
“纳兹维斯科”:“Mcc”,
“Miejscowosc”:“Rybnik”,
“Angielski”:“Angielski C1”
}
]
此图显示在对List.json文件的一次更改中,一个文档被添加了两次。

我已经在stackoverflow论坛上浏览了与复制相关的类似主题。但是,没有一个能解决我的问题。 在我的例子中,每个文档都会上载一次以上。上传100份此类文件将向数据库添加200条记录。
请帮助

从您发布的代码片段来看,似乎一切都很好,我认为正在发生的是,您正在使用
watch
跟踪文件更改(我假设另一个进程将数据写入该文件或类似的内容),并且它只会触发多次

insertMany
按预期工作,由于多次文件更改,您只需多次插入同一文档

我要做的是在定义文档唯一性的相关字段(可能是所有字段)上构建一个

现在,当您尝试插入违反唯一性约束的文档时,它将失败,请务必注意,如果您选择此解决方案,则必须使用
insertMany
ordered:false
选项。如果出于任何原因选择删除它,那么失败的插入将使尚未插入的任何文档也失败

为作为唯一索引一部分的任何键插入重复值。。。如果ordered为false,则插入操作将继续处理所有剩余文档


非常感谢@Tom Slabbaert

最终,我应用了这个解决方案:

[
{
“_id”:“Mongoł”,
“Imie”:“Katarzyna”,
“纳兹维斯科”:“蒙戈”,
“Miejscowosc”:“Kraków(Kraków-Śródmieście)”,
“Angielski”:“Angielski C2”
},
{
“_id”:“Mongołacc”,
“Imie”:“Marieta”,
“纳兹维斯科”:“蒙戈łacc”,
“Miejscowosc”:“Rybnik”,
“Angielski”:“Angielski C1”,
},
{
“_id”:“Mcc”,
“Imie”:“Marieta”,
“纳兹维斯科”:“Mcc”,
“Miejscowosc”:“Rybnik”,
“Angielski”:“Angielski C1”
}
]
fs.watch(文件(“Lista.json”),函数(事件类型,文件名){
const bazaJson=fs.readFileSync(文件(“Lista.json”).toString();
const bazaJson1=JSON.stringify(bazaJson.toString());
const bazaJsonObject=JSON.parse(bazaJson1);
var数组=[];
for(bazaJsonObject中的var键){
array.push(JSON.parse(bazaJsonObject));
}
客户端连接((错误)=>{
如果(错误){
client.close();
} 
否则{
const db=client.db(“测试”);
const kandydaci=db.collection(“kandydaci”);
试一试{
如果(array.length!=0){
insertMany(数组[0],{ordered:false});
}
}捕获(e){
e、 getWriteErrors().forEach(函数(错误){
如果(错误代码!=11000){
投掷e;
}
});
}
}
});
});
我还发现这篇文章很有帮助:
不幸的是,出现了另一个与
\u id
当我设置
\u id:“姓氏”
时,文件上载成功。但除了上传文件,我的应用程序还允许编辑添加的文档。 根据mongoDB生成的唯一
\u id
编辑文档。 所有具有mongo提供的
\u id
的文档都可以编辑。我分配给自己的是不可编辑的。 我曾尝试通过电子邮件下载用户,但他们有时会重复自己的内容,因为在数据库中,有时同一个人拥有不同的数据。 有人会有一些建议吗