2012-01-20 2 views
1

Я пытаюсь обеспечить индекс в поле документа, а не . Версия MongoDB 2.0.2. Это очень простой и как-то я чувствую, что, возможно, пропустил что-то или нет !!! Его способность вставить 3 документа с одинаковой пустой строкой !!Убедитесь, что индекс не работает - MongoDB

Вот информация:

> use testinsert 
switched to db testinsert 
> db.users.ensureIndex({ name : 1}); 
> doc = { 
... name : "" 
... } 
{ "name" : "" } 
> doc 
{ "name" : "" } 
> db.users.stats(); 
{ 
     "ns" : "testinsert.users", 
     "count" : 0, 
     "size" : 0, 
     "storageSize" : 8192, 
     "numExtents" : 1, 
     "nindexes" : 2, 
     "lastExtentSize" : 8192, 
     "paddingFactor" : 1, 
     "flags" : 1, 
     "totalIndexSize" : 16352, 
     "indexSizes" : { 
       "_id_" : 8176, 
       "name_1" : 8176 
     }, 
     "ok" : 1 
} 
> db.users.insert(doc); 
> db.users.insert(doc); 
> db.users.insert(doc); 
> db.users.find(); 
{ "_id" : ObjectId("4f1980dc7e154e6702c4914c"), "name" : "" } 
{ "_id" : ObjectId("4f1980dd7e154e6702c4914d"), "name" : "" } 
{ "_id" : ObjectId("4f1980dd7e154e6702c4914e"), "name" : "" } 
> db.users.ensureIndex({ name : 1}); 
> db.users.insert(doc); 
> db 
testinsert 
> db.users.find(); 
{ "_id" : ObjectId("4f1980dc7e154e6702c4914c"), "name" : "" } 
{ "_id" : ObjectId("4f1980dd7e154e6702c4914d"), "name" : "" } 
{ "_id" : ObjectId("4f1980dd7e154e6702c4914e"), "name" : "" } 
{ "_id" : ObjectId("4f1981557e154e6702c49150"), "name" : "" } 
> version(); 
version: 2.0.2 

может кто-нибудь пожалуйста уточнить, как к тому, что проблема может быть!

ответ

10

Есть нет проблем, вы можете видеть, что индекс есть. Вы ожидаете, что это не позволит дублировать элементы? Для этого вы должны установить уникальный флаг верно:

db.users.ensureIndex({ name : 1},{unique: true}); 

UPDATE: бег обеспечить еще раз с {unique: true} не работает, вы должны удалить и снова ensureIndex:

db.users.dropIndex({name:1}) 
db.users.ensureIndex({ name : 1}, {unique:true, dropDups : true}); 
+2

Черт, бить меня 12 секунд! +1 для вас. – ceejayoz

+2

извините, я тебя не видел;) – milan

+0

проклятый, меня тоже :-) –

Смежные вопросы