sailsjs:自动创建复合唯一索引(mongodb)

时间:2014-04-06 22:29:57

标签: mongodb express sails.js waterline

我在SailsJS应用程序中使用了以下模型,我想在字段' room_name'上添加复合唯一键。和' school_id'。

我目前所做的是从mongo运行此命令:

 db.room.ensureIndex({'room_name': 1, 'school_id':1}, {unique: true})

问题1 我做得对吗?

问题2 是否可以修改我的模型,以便它自动调用此命令而无需手动修改mongodb(来自mongo命令行)?

这是模型

module.exports = {

    schema: true,

    attributes: {

        room_name: {
            type: 'string',
            required: true
        },

        school_id: {
            type: 'string',
            required: true
        },

        children_count: {
            type: 'integer',
            required: true
        }
    }
   }

4 个答案:

答案 0 :(得分:3)

我创建了一个sails钩子,为使用sails-mongo适配器的模型提供高级索引选项。

支持所有mongo索引选项。

https://www.npmjs.com/package/sails-hook-mongoat

答案 1 :(得分:2)

当前没有(从v0.10开始)Sails支持多键索引,尽管它是on our radar。目前,您通过直接在Mongo控制台中指定索引的方式是正确的(也是唯一的)方式。

答案 2 :(得分:0)

我正在使用迁移https://github.com/tj/node-migrate

用于生成索引

my code example

答案 3 :(得分:0)

船长的日志,日期为-303842.4081367327(2019年2月27日)。我们的目的地是Sails 1.0x框架。

即使Sails 1.0x / Waterline在模型中支持MongoDB复合索引声明(我不确定),在生产环境中部署应用程序时,也不会自动创建索引...但可悲:(< / p>

请记住这一点...

问题1 -我做对了吗?

是的...索引有些复杂,有时您需要在生产环境中进行更改,因此有时需要手动进行。

问题2 -自动创建索引

是的...可以手动完成的事情是甜甜圈 ...

的痛苦

对于此问题,您可以使用 config / bootstrap.js 文件。可以使用 createIndex 函数(ensureIndex是createIndex的别名)来代替 ensureIndex 函数(已弃用)。 here中提供了一个有关如何自动执行此操作的有效示例。