【问题标题】:MongoDB unique index does not workMongoDB唯一索引不起作用
【发布时间】:2023-03-07 08:50:01
【问题描述】:

我有一部分简单的代码,由于唯一索引约束而不得不失败。但是这两个对象都被添加到数据库中并且可以被查询,尽管有唯一的索引。

    BasicDBObject typeUrlIndex = new BasicDBObject();
    typeUrlIndex.put(FIELD_TYPE_URL, 1);

    BasicDBObject typeUrlIndexOptions = new BasicDBObject();
    typeUrlIndexOptions.put("background", true);
    typeUrlIndexOptions.put("sparse", true);
    typeUrlIndexOptions.put("unique", true);
    typeUrlIndexOptions.put("dropDups", true);

    objects.ensureIndex(typeUrlIndex, typeUrlIndexOptions);

    // here I can check, that index is really created, and it is true.
    List<DBObject> indexes = objects.getIndexInfo();

    BasicDBObject dbo1 = new BasicDBObject(FIELD_TYPE_URL, "aaa");
    objects.save(dbo1);

    BasicDBObject dbo2 = new BasicDBObject(FIELD_TYPE_URL, "aaa");
    objects.save(dbo2);

两个对象都被保存并获得不同的_id。

更新。 我发现,怎么了。保存到数据库后,两个对象都有自己的 id,但实际上第二个对象没有保存(即使给定 id,也无法查询)。

感谢 araqnid,给出了正确的答案。很遗憾,我没有足够的评分来投票。

【问题讨论】:

  • 嗯,即使你不能投票,你也应该可以将答案标记为已接受,这会将问题标记为已回答。
  • 安东,您应该能够将鼠标悬停在您对答案进行投票的区域下方并单击您在该处看到的复选标记,从而将其标记为已接受。

标签: mongodb indexing unique-index


【解决方案1】:

当您查看新会话时,这两个对象都显示了吗?如果保存不安全,它们可能会返回上面代码中分配的 ID,即使服务器实际上会拒绝第二个。

【讨论】:

    【解决方案2】:

    创建索引时需要添加{ unique: true }选项

    mongodb unique index documentation

    【讨论】:

    • 我加了这个选项,看代码:typeUrlIndexOptions.put("unique", true);
    猜你喜欢
    • 2012-06-25
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2011-08-21
    • 2014-07-29
    相关资源
    最近更新 更多