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 を作成します。

「Mongoose は、スキーマ コンストラクターに渡されない場合、デフォルトで各スキーマに _id フィールドを割り当てます。割り当てられた型は、MongoDB のデフォルトの動作と一致するように ObjectId です。スキーマに _id をまったく追加したくない場合は、このオプションを使用して無効にすることができます。」-マングースのドキュメントから

独自の ID を指定したい場合は、次のようにして重複が作成されないようにすることができます。

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