1

我有带有 Mongoose 的 NodeJS,我正在访问一个 API 来检索数据。我有一个架构如下。

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

有没有其他方法?

4

2 回答 2

2

您可以使用 Mongo 的内置count() 方法来检查该行是否存在并从中有条件地保存模型:

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');
  }
});
于 2013-04-13T13:55:32.720 回答
-1

您不需要向架构中添加 id,Mongoose 会为您创建一个 ObjectId。

“如果没有将一个模式传递给 Schema 构造函数,Mongoose 会默认为每个模式分配一个 _id 字段。分配的类型是 ObjectId 以与 MongoDB 的默认行为一致。如果您根本不希望将 _id 添加到您的模式中,您可以使用此选项禁用它。” - 来自猫鼬文档

如果您确实想指定自己的 id,您可以执行以下操作以确保不会创建重复项:

var dataSchema = new Schema({
  id: {
    type: Number,
    index: {
      unique: true
    }
  },
  name: String
},
{ _id: false });
于 2013-04-11T06:36:53.413 回答