2013-04-11 151 views
1

我有Mongoose的NodeJS,我正在訪問一個API來檢索數據。我有一個Schema如下。NodeJS,Mongoose - 插入數據時的重複條目

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時,我仍然可以看到重複的條目。

有沒有其他的方法?

回答

-1

你不需要爲你的模式添加一個id,Mongoose爲你創建一個ObjectId。

「Mongoose默認爲每個模式分配一個_id字段,如果沒有傳入模式構造函數,被觸發的類型是一個ObjectId,以符合MongoDB的默認行爲如果您不想將_id添加到您的架構,你可以使用這個選項來禁用它。「 - 從Mongoose docs

如果你想指定自己的ID,你可以做以下,以確保沒有重複創建:

var dataSchema = new Schema({ 
    id: { 
    type: Number, 
    index: { 
     unique: true 
    } 
    }, 
    name: String 
}, 
{ _id: false }); 
+1

[錯誤:在保存文件之前必須有一個_id] – Kivylius 2015-11-09 14:27:09

2

您可以使用蒙戈的內置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'); 
    } 
}); 
+0

您可以使用同樣的事情用'.findOne'過,這是略少難忘但您提供完整的返回db ro如果它是重複的,你可以訪問屬性。 – 2014-10-06 06:54:21