MongoDB唯一索引无效

3

我有一段简单的代码,但由于唯一性索引限制,它必须失败。然而,这两个对象都已被添加到数据库中,并且可以查询,尽管存在唯一性索引。

    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,提供了正确的答案。不幸的是,我没有足够的评分来投票。


1
嗯,即使您无法投票,也应该能够标记答案为已接受,这将标记问题已得到解答。 - araqnid
Anton,你应该可以将其标记为已接受的答案。只需将鼠标悬停在投票区域下方,并单击您看到的复选标记即可。 - IanWhalen
2个回答

7

在新会话中查看时,两个对象是否都出现?如果保存是不安全的,则它们可能返回带有在上面的代码中分配的ID,即使服务器实际上将拒绝第二个对象。


0

我已经添加了这个选项,请看代码:typeUrlIndexOptions.put("unique", true); - Anton Popovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接