我讀過文檔以及其他堆棧溢出帖子,我只是無法弄清楚我在做什麼錯誤...這應該是一個簡單的驗證來檢查一個唯一的字符串,並根據該文檔和其他堆棧溢出文章,這應該引發一個錯誤,而不是保存重複的記錄。在這種情況下,它似乎根本不驗證...我在做簡單的Mongoose獨特驗證時做錯了什麼?
我已嘗試刪除整個集合並再次運行應用程序,以找到相同的行爲。
我按照this post中所述的推薦驗證方式進行驗證。
在此先感謝您的幫助。新的NodeJS。
bucket.js:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bucketSchema = new Schema({
name: {
type: String,
index: true,
required: true,
unique: true,
trim: true
},
created_at: {
type: Date,
default: Date.now
}
});
var Bucket = mongoose.model('Bucket', bucketSchema);
module.exports = Bucket;
app.js
var mongoose = require('mongoose');
// Require data models
var Bucket = require('./models/bucket.js');
// Connect to database
mongoose.connect("mongodb://localhost/tritonia");
mongoose.set('debug' ,true);
// Test
var bucket = new Bucket({ name: "foo" });
bucket.save(function(err) {
if (err) {
console.log(err);
} else {
console.log("Saved");
}
});
var bucket2 = new Bucket({ name: "foo" });
bucket2.save(function(err) {
if (err) {
console.log(err);
} else {
console.log("Test failed: It should not save a second bucket named 'foo'");
}
})
輸出:
Express server listening on port 3000
Mongoose: buckets.ensureIndex({ name: 1 }) { safe: undefined, background: true, unique: true }
Mongoose: buckets.insert({ __v: 0, created_at: new Date("Mon, 16 Dec 2013 02:27:39 GMT"), _id: ObjectId("52ae651baabf290436000001"), name: 'foo' }) {}
Mongoose: buckets.insert({ __v: 0, created_at: new Date("Mon, 16 Dec 2013 02:27:39 GMT"), _id: ObjectId("52ae651baabf290436000002"), name: 'foo' }) {}
Saved
Test failed: It should not save a second bucket named 'foo'
DB控制檯:
> db.buckets.find()
{ "name" : "foo", "_id" : ObjectId("52ae6427a58628cd34000001"), "created_at" : ISODate("2013-12-16T02:23:35.052Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae6427a58628cd34000002"), "created_at" : ISODate("2013-12-16T02:23:35.056Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae6447d0ac5a0e35000001"), "created_at" : ISODate("2013-12-16T02:24:07.413Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae6447d0ac5a0e35000002"), "created_at" : ISODate("2013-12-16T02:24:07.416Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae64f02876b7d535000001"), "created_at" : ISODate("2013-12-16T02:26:56.642Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae64f02876b7d535000002"), "created_at" : ISODate("2013-12-16T02:26:56.645Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae650caeda67f435000001"), "created_at" : ISODate("2013-12-16T02:27:24.646Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae650caeda67f435000002"), "created_at" : ISODate("2013-12-16T02:27:24.689Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae651baabf290436000001"), "created_at" : ISODate("2013-12-16T02:27:39.136Z"), "__v" : 0 }
{ "name" : "foo", "_id" : ObjectId("52ae651baabf290436000002"), "created_at" : ISODate("2013-12-16T02:27:39.140Z"), "__v" : 0 }