我正在学习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);例如,如果我在这里添加了一个新产品,它应该检查数据库,例如:标题匹配数据库,然后不要添加到数据库,只有标题是可用的。
谢谢!
发布于 2019-11-30 04:29:31
您可以通过在集合中创建唯一索引来防止多个产品具有相同的标题。
yourProductSchema.index({ "title": 1 }, { unique: true });这将在插入具有现有标题的文档时生成err。
更多信息:https://docs.mongodb.com/manual/core/index-unique/
另一种方式,如果您希望其他字段也被更新。您可以使用upsert。更多信息请点击此处:https://docs.mongodb.com/manual/reference/method/db.collection.update/
发布于 2019-11-30 04:53:10
要创建唯一索引,请使用db.collection.createIndex()方法,并将唯一选项设置为true。
例如,要在products集合的title字段上创建唯一索引,请在mongo shell中使用以下操作:
db.products.createIndex( { "title": 1 }, { unique: true } )https://stackoverflow.com/questions/59110547
复制相似问题