首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第一次插入时,如果数据集具有重复值,则在mongoose上构建唯一索引将失败。

问第一次插入时,如果数据集具有重复值,则在mongoose上构建唯一索引将失败。
EN

Stack Overflow用户
提问于 2014-11-18 18:28:04
回答 2查看 120关注 0票数 0

我试图创建一个猫鼬模型如下:

代码语言:javascript
复制
var bookschema = mongoose.Schema({
    path: {
        type: String,
        unique: true
    },
    dir: String,
    filename: String,
    size: String,
    type: String,
    related: Array
});

var Books = mongoose.model('Books',bookschema);

现在,我第一次输入数据是通过Model.create,的数据集数组有重复的键。

因此,没有创建上面的“路径”索引。Mongoose在构建路径索引时报告了一个错误,但是Mongoose没有显示错误。但是,(删除数据库后),如果我尝试一个小数据集(没有重复的路径值),则索引将被正确构建。

在这样的用例中,什么是强制唯一索引在第一次通过Mongoose插入之前构建的最佳方法?另外,你认为我应该把这件事报告给猫鼬吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-18 19:09:36

通过模型上的'index'事件报告索引错误。因此,要查看在为Books创建索引期间发生的任何错误,可以添加以下内容:

代码语言:javascript
复制
Books.on('index', function(err) {
    if (err) {
        console.error('Books index error: %s', err);
    }
    else {
        console.info('Books index complete');
    }
});

要强制创建唯一的索引,可以将dropDups选项添加到索引定义中,但要谨慎使用,因为它将永久删除任何重复的索引。

代码语言:javascript
复制
var bookschema = mongoose.Schema({
    path: {
        type: String,
        index: {unique: true, dropDups: true}
    },
    dir: String,
    filename: String,
    size: String,
    type: String,
    related: Array
});
票数 1
EN

Stack Overflow用户

发布于 2014-11-18 18:46:26

我建议你用终端和芒果来设置你唯一的索引。打开一个终端并键入以下内容:

代码语言:javascript
复制
mongo
use your_db_name
db.books.ensureIndex( { path: 1 }, { unique: true } )

您可以阅读更多有关此这里的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27001386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档