我正在学习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);
因此,例如,如果我在此处添加新产品,则应该检查数据库是否类似:标题与数据库匹配,然后不添加至数据库,只有标题可用的那些。
谢谢!
答案 0 :(得分:2)
要创建唯一索引,请使用db.collection.createIndex()方法,并且将unique选项设置为true。
例如,要在产品集合的标题字段上创建唯一索引,请在mongo shell中使用以下操作:
db.products.createIndex( { "title": 1 }, { unique: true } )
答案 1 :(得分:0)
您可以通过在集合中创建唯一索引来防止具有相同标题的多个产品。
knit("filename.Rmd")
当插入具有现有标题的文档时,这将生成yourProductSchema.index({ "title": 1 }, { unique: true });
。
更多信息:https://docs.mongodb.com/manual/core/index-unique/
另一种方式,如果您还希望更新其他字段。您可以使用upsert。此处更多信息:https://docs.mongodb.com/manual/reference/method/db.collection.update/