我有NodeoS和Mongoose,我正在访问一个API来检索数据。我有一个Schema如下。
var dataSchema = new Schema({
id:Number,
name:String
));
我正在使用以下代码插入。
var d = Data.find({id:data.id}, function(error, curr_data) {
if(curr_data.length == 0) { // check to make sure only unique entries are entered
console.log(" Inserting : " + curr_data.name);
new Data(data).save();
}
});
但是当我检查我的Mongo数据库时,我仍然可以看到重复的条目。
有另一种方式吗?
答案 0 :(得分:2)
您可以使用Mongo的内置count() method来检查该行是否存在,并从中有条件地保存模型:
Data.count({id: data.id}, function (err, count) {
if (!count) {
console.log("Inserting " + curr_data.name);
new Data(data).save();
}
else {
// Handle err.
console.log('Already Exists');
}
});
答案 1 :(得分:-1)
您无需在架构中添加ID,Mongoose会为您创建一个ObjectId。
“Mongoose默认情况下为每个模式分配一个_id字段,如果没有传递给Schema构造函数。被分配的类型是一个ObjectId,与MongoDBs的默认行为一致。如果你不想在你的模式中添加一个_id完全可以使用此选项禁用它。“ - 来自Mongoose docs
如果您确实想要指定自己的ID,可以执行以下操作以确保不会创建重复项:
var dataSchema = new Schema({
id: {
type: Number,
index: {
unique: true
}
},
name: String
},
{ _id: false });