确保索引不起作用 - MongoDB

JWh*_*hiz 1 indexing mongodb

我正在尝试确保文档字段的索引并且它不起作用.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
Run Code Online (Sandbox Code Playgroud)

有人可以澄清可能是什么问题!

mil*_*lan 11

没有问题,你可以看到,指数是存在的.你期望它不允许重复元素?为此,您必须将唯一标志设置为true:

db.users.ensureIndex({ name : 1},{unique: true});
Run Code Online (Sandbox Code Playgroud)

更新:运行确保再次使用{unique: true}不起作用,你必须ensureIndex再次丢弃:

db.users.dropIndex({name:1})
db.users.ensureIndex({ name : 1}, {unique:true, dropDups : true}); 
Run Code Online (Sandbox Code Playgroud)

  • 该死的,打了我12秒!为你+1. (2认同)
  • 对不起,我没有看到你;) (2认同)
  • 删除并再次确保,db.users.ensureIndex({name:1},{unique:true,dropDups:true}); (2认同)