Убедитесь, что индекс не работает - MongoDB - PullRequest
1 голос
/ 20 января 2012

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

Вот подробности:

> 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

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

1 Ответ

11 голосов
/ 20 января 2012

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

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

ОБНОВЛЕНИЕ: при запуске убедитесь, что снова с {unique: true} не работает, вы должны сбросить и ensureIndex снова:

db.users.dropIndex({name:1})
db.users.ensureIndex({ name : 1}, {unique:true, dropDups : true}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...