NodeJS,Mongoose - 插入数据时重复条目

时间:2013-04-11 04:11:41

标签: node.js mongodb mongoose

我有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数据库时,我仍然可以看到重复的条目。

有另一种方式吗?

2 个答案:

答案 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 });