Mongodb独特的复合指数不尊重日期

时间:2015-04-29 23:10:57

标签: mongodb date indexing unique-constraint compound-index

我在mongodb中遇到了一个独特的复合索引。代码说得最好(在mongo shell中):

var collection = db.getCollection('test');
collection.drop(); // start from scratch
collection.createIndex({date:1});
collection.createIndex({_id:1, date:1}, {unique: true});

var doc1 = {_id: NumberInt(1), date: new ISODate('2015-04-27 00:00:00.000Z')};
var doc2 = {_id: NumberInt(1), date: new ISODate('2015-04-28 00:00:00.000Z')};

collection.insert(doc1);
collection.insert(doc2);

我希望doc2插入正常,因为即使它的_id为1,它的日期也不同,但脚本会返回此错误:

E11000 duplicate key error index: db.test.$_id_ dup key: { : 1 }

当我对集合执行find()时,我实际上只看到:

{ "_id" : 1, "date" : ISODate("2015-04-27T00:00:00.000Z") }

为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

您不能在唯一的复合索引中使用_id,因为_id在MongoDB中默认使用为唯一键本身。而不是 _id ,请使用 id

class Namespace(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

namespace = Namespace(func1=print, func2=len, func3=sum)

namespace.func1(namespace.func2([1, 2])) # prints 2

答案 1 :(得分:0)

它不起作用,因为_id使用相同的值,它本身具有唯一约束。

为什么不使用这样的东西来节省索引:

{
   _id: {
    docid: new ObjectId(),
    date: new ISODate()
  }
}