Node.js 如何阻止数据库复制项目

Node.js 如何阻止数据库复制项目,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在学习Nodejs和MongoDB,我成功地连接到数据库并保存到数据库正在工作,但如果我在列表中添加另一项,然后再次运行脚本以保存到数据库,它将复制已经存在的项。 我希望每当我需要添加一个新项来执行项目时,它只添加该特定项,而不是再次添加所有内容 这是我的播种机: const mongoose = require("mongoose"); const Keys = require("../config/auth"); mongoose.set("useUnifiedTopology", t

我正在学习Nodejs和MongoDB,我成功地连接到数据库并保存到数据库正在工作,但如果我在列表中添加另一项,然后再次运行脚本以保存到数据库,它将复制已经存在的项。 我希望每当我需要添加一个新项来执行项目时,它只添加该特定项,而不是再次添加所有内容

这是我的播种机:

const mongoose = require("mongoose");
const Keys = require("../config/auth");

mongoose.set("useUnifiedTopology", true);
mongoose.set("useNewUrlParser", true);
mongoose.connect(Keys.MongoURI);

const products = [
  new Product({
    imagePath:
      "test",
    title: "test1",
    description: "test1",
    price: 20
  }),
  new Product({
    imagePath:
      "test2",
    title: "test2",
    description: "test2",
    price: 20
  })
];

let done = 0;
for (let i = 0; i < products.length; i++) {
  products[i].save(function(err, result) {
    done++;
    if (done === products.length) {
      exit();
    }
  });
}
function exit() {
  mongoose.disconnect();
}
console.log(products);
const mongoose=require(“mongoose”);
const Keys=require(“../config/auth”);
mongoose.set(“useUnifiedTopology”,true);
set(“useNewUrlParser”,true);
mongoose.connect(Keys.MongoURI);
常数乘积=[
新产品({
图像路径:
“测试”,
标题:“测试1”,
描述:“test1”,
价格:20
}),
新产品({
图像路径:
“测试2”,
标题:“测试2”,
描述:“test2”,
价格:20
})
];
让done=0;
for(设i=0;i
所以,如果我在这里添加一个新产品,它应该检查数据库,如果喜欢:数据库上的标题匹配,那么不要添加到数据库中,只有那些标题是可用的


谢谢

通过在收藏中创建唯一索引,可以防止多个产品具有相同的标题

yourProductSchema.index({“title”:1},{unique:true});
插入带有现有标题的文档时,这将生成一个
错误

更多信息:


另一种方法是,如果您希望其他字段也被更新。您可以使用upsert。此处的详细信息:

要创建唯一索引,请使用db.collection.createIndex()方法,并将唯一选项设置为true

例如,要在products集合的title字段上创建唯一索引,请在mongo shell中使用以下操作:

db.products.createIndex( { "title": 1 }, { unique: true } )